当前位置: 首页 > 知识库问答 >
问题:

在spring boot应用程序中将autowired对象作为模拟注入spock测试

卫成和
2023-03-14

我有一个Spring Boot应用程序和服务,里面有私有的道场。私有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')
    }
}

共有1个答案

颜奇希
2023-03-14

结果我这样做了:

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可以直接设置私有字段,而不需要额外的操作。对我来说是新闻。

 类似资料:
  • 所以我想做一些事情 但我得到了空异常

  • 我正在尝试运行UI测试。当我不嘲笑任何注入的依赖时,一切都运行得很好。当我将模块的@provides return切换到mocked对象时,我会得到以下消息: 已开始运行测试 测试仪器过程崩溃。 下面是一些测试代码: 什么都不能打印出来。 但如果我把模拟的共享数据转换成真实的数据 嘲弄一些其他模块也会带来相同的结果,而嘲弄其他模块工作良好。 有什么想法吗?

  • 问题内容: 每当我想测试使用资源注入的类时,我最终都会包含一个仅在测试中使用的构造函数: 还有另一种模拟资源注入的方式,或者这是遵循的正确模式吗? 问题答案: 您可以使用简单的光泽效果,它可以模拟EJB注入系统。 另一种方法是在测试中使用反射来设置字段,我有时使用类似这样的内容:

  • 我有一个@InjectMocks对象,在我的测试类中使用@InjectMocks时,我需要模拟它抛出的NPE 下面是我的班级结构 你能建议如何模仿这个MyService对象吗。我已经使用了@Mock和@Injected Mock,但在获得NPE时不起作用。我尝试注入基类和父类,但没有成功。

  • 我想在应用程序运行时找到我的对象大小。我想用千分尺在Grafana中显示我的对象大小。 我的对象像人、学生、...... 我该怎么办? 对象大小像文件大小、对象体积