春季测试,如何使用`@ TestConfiguration`模拟方法调用的结果

时间:2018-09-27 13:17:08

标签: spring spock

我有这个Bean,它在我尝试测试的另一个Bean内的某个地方使用。但是我无法模拟该方法调用,因为它总是说_是未知属性。

@TestConfiguration
class IntegrationTestMockingConfig {
    private DetachedMockFactory factory = new DetachedMockFactory()

    @Bean
    CloudStorage s3Client() {
        def mockedS3 = factory.Mock(CloudStorage)
        1 * mockedS3.tempDownload(_) >> {
            log.info("mocked s3 client")
            new File(ClassLoader.getSystemResource("testfiles/regular.zip").toURI())
        }
        mockedS3
    }

}

2 个答案:

答案 0 :(得分:0)

只需将方法存入测试的setup()方法中即可。您可以通过将依赖注入到测试中来获得模拟。

答案 1 :(得分:0)

不支持在规范上下文之外进行模拟/存根。我建议使用Spock 1.2的@SpringBean

@SpringBootTest
class MyTest extends Specification {

    @SpringBean
    CloudStorage mockedS3 = Mock() 

    def "test"() {
      when:
      otherBean.otherMethod()

      then:
        1 * mockedS3.tempDownload(_) >> {
               log.info("mocked s3 client")
                new File(ClassLoader.getSystemResource("testfiles/regular.zip").toURI())
        }
    }
}