我有一个带有私有DAO字段的Spring应用程序和服务。私有DAO属性使用@Autowired
进行注释(没有设置或构造函数设置它,只是注释)。我试图为服务编写Spock测试,但找不到如何将模拟DAO注入@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')
}
}
有什么想法吗?
UPD:,我正在测试代码。
发布于 2015-06-09 06:58:23
结果我这样做了:
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可以直接设置私有字段而不需要额外的操作。这对我来说是个新闻。
发布于 2017-06-12 11:49:45
很抱歉给你带来了一年多一点的生命,但这是我的两分钱。Groovy确实提供了对私有字段的访问,即使它破坏了封装。如果您还没有计算出它,那么当您手动实例化一个类时,如果您使用自动头发字段,那么自动发条字段将为null。您可以为其提供setter并对其进行设置,或者groovy可以查看私有字段。然而,如果您有奢侈品,我建议重构它使用构造函数注入,并做同样的任何您的代码在未来。当涉及到测试时,现场注入和setter注入都存在一些问题。
https://stackoverflow.com/questions/30729408
复制相似问题