私はWall's Spring Bootのアクションブックの例を見ています。 Groovyで書かれたシンプルなWebアプリケーションです。このプロジェクトは、GraleビルドファイルなしでSpring CLIを使用し、H2およびThymeleafの依存関係を提供するためにGrabs.groovyファイルを使用して、ビルド、実行、テストされています。 2つのテストクラスがあります。最初はJUnitテストであり、2番目はSpock仕様です。 JUnitテストファイルは次のとおりです。spring cliを使った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 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))
}
}
とスポックの仕様は次のとおりです。
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))
}
}
これらのファイルは、プロジェクトのルートオフtestsディレクトリにあります。 JUnitテストを "spring test tests/ReadingListControllerTest.groovy"コマンドで実行すると、テストは正常に実行されます。 "Spring test tests"コマンドで両方のテストを実行すると、両方のテストが正常に実行されます。しかし、Spockテストを "spring test tests/ReadingListControllerSpec.groovy"コマンドで実行するか、ReadingListControllerTest.groovyファイルを削除して "spring test tests"コマンドを使用すると、次のコンパイルエラーが発生します。
ReadingListControllerSpec.groovy: 5: unable to resolve class org.mockito.Mockito
@ line 5, column 1.
import static org.mockito.Mockito.*
^
私はSpockテストを書くのが好きではないので、問題の原因がわかりません。