【发布时间】:2019-11-14 16:58:41
【问题描述】:
我正在尝试在 Groovy/Spock 中编写单元测试,并且必须测试以下代码。
public class ClassA {
@Inject
private ClassB classB;
@Inject
private ClassC classC;
@Inject
private ClassD classD;
public void update(final int a, final Map<String, Object> b) {
classB.executeCommand(classC.callToMethodInClassC(), new InterfaceE<Void>() {
@Override
public Void execute() {
classD.update(a, b);
return null;
}
});
}
}
现在,当我编写测试代码时,我无法到达classD.update(a, b); 行。我知道如何为 ClassB、ClassC、ClassD 注入模拟/真实对象,但无法达到该声明。请帮忙。
注意: ClassA.update() & ClassD.update() 除了签名匹配外,没有任何关系。
【问题讨论】:
-
几个问题来澄清您的用例。 1) 你是模拟
classB还是使用真正的实现? 2)executeCommand是异步方法还是同步方法?如果你模拟classB,那么你的方法什么也不做——它执行空模拟。如果您使用真实对象并且该方法是异步的,您可能需要使用一些等待机制,以便您的测试方法在完成异步调用之前不会完成。根据我在您的示例中看到的内容,我只能告诉您这些。它遗漏了很多上下文和细节,我们只能猜测。 -
抱歉回来晚了。 (1) 我可以模拟 ClassB,因为我的单元测试可以达到
classD.update(a, b);(2) 异步,最后,我无法理解你在最后一个语句中的意思。另外,如果您需要更多详细信息,请提及。我会尽量提供相同的。
标签: java unit-testing groovy ejb spock