首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将自动对象作为模拟注入到spring应用程序中的spock测试中

将自动对象作为模拟注入到spring应用程序中的spock测试中
EN

Stack Overflow用户
提问于 2015-06-09 02:25:37
回答 2查看 9.7K关注 0票数 4

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

代码语言:javascript
运行
AI代码解释
复制
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:,我正在测试代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-09 06:58:23

结果我这样做了:

代码语言:javascript
运行
AI代码解释
复制
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可以直接设置私有字段而不需要额外的操作。这对我来说是个新闻。

票数 9
EN

Stack Overflow用户

发布于 2017-06-12 11:49:45

很抱歉给你带来了一年多一点的生命,但这是我的两分钱。Groovy确实提供了对私有字段的访问,即使它破坏了封装。如果您还没有计算出它,那么当您手动实例化一个类时,如果您使用自动头发字段,那么自动发条字段将为null。您可以为其提供setter并对其进行设置,或者groovy可以查看私有字段。然而,如果您有奢侈品,我建议重构它使用构造函数注入,并做同样的任何您的代码在未来。当涉及到测试时,现场注入和setter注入都存在一些问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30729408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档