Spring boot 将自动连线对象作为模拟注入spring boot应用程序中的spock测试
我有一个Spring Boot应用程序和服务,其中包含私有DAO字段。私有DAO属性用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
@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必须与服务类位于同一个包中。不是包私有的。但是谢谢你的留言。