【发布时间】:2016-07-16 06:21:33
【问题描述】:
我正在查看 Wall 的 Spring Boot in action book 中的一个示例。它是一个用 groovy 编写的简单 Web 应用程序。该项目正在使用没有 gradle 构建文件的 Spring CLI 构建、运行和测试,并使用 Grabs.groovy 文件来提供 H2 和 Thymeleaf 依赖项。有两个测试班。第一个是 JUnit 测试,第二个是 Spock 规范。 JUnit 测试文件是:
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))
}
}
Spock 规范是:
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))
}
}
这些文件位于项目根目录下的测试目录中。如果我使用命令“spring test tests/ReadingListControllerTest.groovy”运行 JUnit 测试,则测试会成功运行。如果我使用“Spring test tests”命令运行这两个测试,两个测试都会成功运行。但是,如果我使用命令“spring test tests/ReadingListControllerSpec.groovy”或删除 ReadingListControllerTest.groovy 文件并使用命令“spring test tests”仅运行 Spock 测试,则会收到以下编译错误:
ReadingListControllerSpec.groovy: 5: unable to resolve class org.mockito.Mockito
@ line 5, column 1.
import static org.mockito.Mockito.*
^
我不熟悉编写 Spock 测试,所以我不确定问题出在哪里。
【问题讨论】:
标签: testing junit spring-boot spock