【问题标题】:Running Spock specification test with spring cli使用 spring cli 运行 Spock 规范测试
【发布时间】: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


    【解决方案1】:

    我遇到了同样的问题,无法解决,但我能够通过从 ReadingListControllerSpec.groovy 文件中删除导入并完全限定模拟方法而不是使用导入来解决它....

    即 org.mockito.Mockito.mock(ReadingListRepository.class)

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但通过添加以下依赖项解决了。

      @Grab("org.mockito:mockito-core:2.13.0")

      系统规格:Java 1.8.0_152 Groovy 版本:2.4.13

      在包含依赖项后,以下命令行命令可以正常工作。

      春季测试测试/ReadingListControllerSpec.groovy

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-27
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 2017-04-02
        • 2014-09-30
        • 2019-04-22
        相关资源
        最近更新 更多