我正在尝试用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注入模拟/真实对象,但无法达到该声明。请帮助。
使您的classB模拟为:
Mock(ClassB) {
executeCommand(_, _) >> { c, e -> e.execute() }
}
即提供ClassB的executeCommand
方法的模拟实现,该实现实际上调用interfaceE的execute
方法。