spring-boot - 在 Spring Boot 应用程序中将 Autowiring 的对象作为模拟注入(inject)到 spock 测试中

标签 spring-boot autowired spock

我有一个 Spring Boot 应用程序和 Service,其中包含私有(private) DAO 字段。私有(private) DAO 属性用 @Autowired 注释(没有 setter 或构造器设置它,只是注释)。
我尝试为服务编写 Spock 测试,但找不到如何将模拟 DAO 注入(inject) @Autowired多变的。

class TestService extends Specification {
    DAO dao = Mock(DAO)
    Service service = new Service()

    def "test save"() {
        when:
        service.save('data')

        then:
        1 * dao.save('data')
    }
}


有任何想法吗?

更新:我正在测试java代码。

最佳答案

结果我这样做了:

class TestService extends Specification {
    DAO dao = Mock(DAO)
    Service service = new Service()

    void setup() {
        service.dao = dao
    }

    def "test save"() {
        when:
        service.save('data')

        then:
        1 * dao.save('data')
   }
}

一点是使用反射。但是 Groovy 可以直接设置私有(private)字段而无需额外的操作。这对我来说是个新闻。

关于spring-boot - 在 Spring Boot 应用程序中将 Autowiring 的对象作为模拟注入(inject)到 spock 测试中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30729408/

相关文章:

java - Spring Boot Banner.gif 不是动画的

java - 无法打开使用 spring-boot 下载的 S3 zip 文件

java - Spring Autowired 实例在每个请求上始终相同

java - spring-nullpointerexception- 无法访问无注释类中的 Autowiring 注释服务(或 dao)

spock - Spock的@Unroll注释的目的是什么

java - Beans和RabbitTemplate/RabbitHealth出现TomcatStarter错误

java - Spring Autowire 检索错误的类

testing - Grails 服务的 Spock 测试中的交互太少

unit-testing - 测试具有来自src/groovy的bean的grails Controller

java - 在 springboot 反序列化器中包含带有 jackson 的根对象