Spring boot 将自动连线对象作为模拟注入spring boot应用程序中的spock测试

Spring boot 将自动连线对象作为模拟注入spring boot应用程序中的spock测试,spring-boot,autowired,spock,Spring Boot,Autowired,Spock,我有一个Spring Boot应用程序和服务,其中包含私有DAO字段。私有DAO属性用@Autowired注释(没有设置器或构造函数设置它,只有注释)。 我试图为服务编写Spock测试,但找不到如何将模拟DAO注入@Autowired变量 class TestService扩展了规范{ DAO=Mock(DAO) 服务=新服务() def“测试保存”(){ 什么时候: service.save('数据') 然后: 1*dao.save('数据') } } 有什么想法吗 UPD:我正在测试jav

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

class TestService扩展了规范{
DAO=Mock(DAO)
服务=新服务()
def“测试保存”(){
什么时候:
service.save('数据')
然后:
1*dao.save('数据')
}
}
有什么想法吗

UPD:我正在测试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可以直接设置私有字段,而无需额外的操作。这对我来说是个新闻。

很抱歉给我带来了一条一年多的线,但这是我的两分钱。Groovy确实提供了对私有字段的访问,即使它破坏了封装。以防万一,如果您还没有弄明白,当您手动实例化一个带有自动连接字段的类时,自动连接字段将为null。您可以为它提供setter并对其进行设置,也可以groovy以任何方式查看私有字段。然而,如果您有足够的时间,我建议您重构它,使用构造函数注入,并在将来对您的任何代码执行相同的操作。当涉及到测试时,字段注入和setter注入有一些问题。

您可以创建一个包字段并只分配它。改为使用带@Autowired的构造函数-可以很好地处理spring和单元测试
dao
变量不是私有的,而是默认的。默认范围变量可以在同一个包中访问。您的TestService必须与服务类位于同一个包中。不是包私有的。但是谢谢你的留言。