2016-03-28 25 views
0

私は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テストを書くのが好きではないので、問題の原因がわかりません。

答えて

0

私は同じ問題がありましたが、それを理解できませんでしたが、私はReadingListControllerSpec.groovyファイルからインポートを削除し、インポートを使用する代わりにモックメソッドを完全に修飾することで回避できました。

すなわち org.mockito.Mockito.mock(ReadingListRepository.class)

0

私は同じ問題があったが、次の依存関係を追加することで解決。

@Grab( "org.mockito:mockitoコア:2.13.0")

システム仕様:Javaの1.8.0_152 グルービーバージョン:依存封入後2.4.13

次のコマンドlineコマンドは問題なく動作します。

spring test tests/ReadingListControllerSpec.groovy

関連する問題