gpt4 book ai didi

java - 如何模拟 Autowired 对象(java)并将其注入(inject)到 Spock 中的 spy 对象中

转载 作者:行者123 更新时间:2023-12-02 04:01:51 24 4
gpt4 key购买 nike

如何将模拟对象注入(inject)到 Spock 中的 spy 实例中?

示例:

测试类

class Service {

@AutoWired
private Util util;

public void testMethod(int a, int b) {

int c = sum(a,b);
util.format(c);
}

private int sum(int a, int b) {
......
}
}

斯波克:

def "testMethod with valid inputs"() {

given:
def serviceSpy = Spy(Service)
//spy.util = Mock(Util) I can't do this
spy.sum(_,_) >> 2

......
}

所以,我的疑问是如何将模拟对象注入(inject)到 spy 实例中?

我尝试监视现有实例,但它没有 stub 测试类中的方法。

有人可以建议我,我在这里可以做什么吗?或者我可以使用 Junit(Mockito) 轻松解决它吗?

最佳答案

您可以使用“constructorArgs”

这是一个例子:

def util = Stub(Util) // or whatever
def serviceSpy = Spy(Service, constructorArgs: [util])

但是,为了使其正常工作,请勿在字段上使用@Autowire。撇开 Spring 在现实生活中运行这一事实不谈,对于这样的测试,您可能没有 Spring 。因此,显式放置依赖项引用将破坏封装,并且在任何情况下都不起作用。

相反,我建议使用构造函数依赖:

class Service {

private final Util util;

@Autowired // in recent versions of spring no need to use this annotation
public Service(Util util) {
this.util = util;
}
}

关于java - 如何模拟 Autowired 对象(java)并将其注入(inject)到 Spock 中的 spy 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com