小编Pat*_*oos的帖子

模拟一类spring构造型"Repository"时,Spock mock返回null - 为什么?

我刚刚发现,使用spock时你可以模拟除"Repository"之外的所有spring构造型("Component","Service"和"Controller"). 是什么原因?

示例:

只要"TestRepository"类具有构造型注释"Repository",以下示例就不起作用,因为mock的返回值为"null".如果将构造型注释更改为其他构造型之一,则mock将返回"TestModel"的预期实例.

控制器:

@Controller
class TestController {

private final TestRepository testRepository

TestController(TestRepository testRepository) {
    this.testRepository = testRepository
}

@RequestMapping("/test")
String test(Model model) {
    TestModel testmodel = testRepository.getTestModel()
    ...
}
Run Code Online (Sandbox Code Playgroud)

存储库:("@ Repository"不起作用,"@ Component","@ Service"和"@Controller"工作)

@Repository
class TestRepository {
    TestModel getTestModel() {...}
}
Run Code Online (Sandbox Code Playgroud)

测试:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc(secure = false)
@DirtiesContext
class TestControllerSpec extends Specification {
    @Autowired
    MockMvc mockMvc

    @Autowired
    TestRepository testRepository

    def "test"() {
        testRepository.getTestModel >> new TestModel()
    }

    @TestConfiguration
    static class MockConfig {
        def factory = new …
Run Code Online (Sandbox Code Playgroud)

unit-testing spring-mvc spock spring-boot

5
推荐指数
1
解决办法
1120
查看次数

标签 统计

spock ×1

spring-boot ×1

spring-mvc ×1

unit-testing ×1