Wall's Spring Boot uygulamasından hareket kitabındaki bir örneğe bakıyorum. Bu groovy ile yazılmış basit bir web uygulamasıdır. Proje, bir CLIP dosyası olmadan ve CLI ve Thymeleaf bağımlılıkları sağlamak için bir Grabs.groovy dosyası kullanılarak Spring CLI kullanılarak çalıştırılmakta, test edilmekte ve test edilmektedir. İki test dersi var. Birincisi bir JUnit testi ve ikincisi bir Spock belirtimidir. JUnit testleri dosyasıdır:Spread spesifikasyon testi ile bahar klipsi yayınlanıyor
import org.springframework.test.web.servlet.MockMvc
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*
import static org.mockito.Mockito.*
class ReadingListControllerTest {
@Test
void shouldReturnReadingListFromRepository() {
List<Book> expectedList = new ArrayList<Book>()
expectedList.add(new Book(
id: 1,
reader: "Craig",
isbn: "9781617292545",
title: "Spring Boot in Action",
author: "Craig Walls",
description: "Spring Boot in Action is ..."
))
def mockRepo = mock(ReadingListRepository.class)
when(mockRepo.findByReader("Craig")).thenReturn(expectedList)
def controller = new ReadingListController(readingListRepository: mockRepo)
MockMvc mvc = standaloneSetup(controller)
.build()
mvc.perform(get("/"))
.andExpect(view().name("readingList"))
.andExpect(model().attribute("books", expectedList))
}
}
ve Spock özelliğidir:
import org.springframework.test.web.servlet.MockMvc
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*
import static org.mockito.Mockito.*
class ReadingListControllerSpec extends Specification {
MockMvc mockMvc
List<Book> expectedList
def setup() {
expectedList = new ArrayList<Book>()
expectedList.add(new Book(
id: 1,
reader: "Craig",
isbn: "9781617292545",
title: "Spring Boot in Action",
author: "Craig Walls",
description: "Spring Boot in Action is ..."
))
def mockRepo = mock(ReadingListRepository.class)
when(mockRepo.findByReader("Craig")).thenReturn(expectedList)
def controller =
new ReadingListController(readingListRepository: mockRepo)
mockMvc = standaloneSetup(controller).build()
}
def "Should put list returned from repository into model"() {
when:
def response = mockMvc.perform(get("/"))
then:
response.andExpect(view().name("readingList"))
.andExpect(model().attribute("books", expectedList))
}
}
Bu dosyalar proje kök kapalı testler dizinde bulunmaktadır. JUnit testini "spring test tests/ReadingListControllerTest.groovy" komutuyla çalıştırırsam, test başarılı bir şekilde çalışır. Her iki testi de "Bahar testi testleri" komutuyla çalıştırırsam her iki test de başarılı bir şekilde çalışır. Ancak "Spock testini" spring test tests/ReadingListControllerSpec.groovy "komutuyla veya ReadListControllerTest.groovy dosyasını kaldırarak ve" spring test tests "komutunu kullanarak çalıştırırsam, şu derleme hatasını alırım:
ReadingListControllerSpec.groovy: 5: unable to resolve class org.mockito.Mockito
@ line 5, column 1.
import static org.mockito.Mockito.*
^
Spock testleri yazarken familliar değilim, bu yüzden sorunun ne olduğundan emin değilim.