在Junit或Groovy / Spock测试中测试匿名类

问题描述 投票:0回答:1

我正在尝试用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注入模拟/真实对象,但无法达到该声明。请帮助。

java unit-testing groovy ejb spock
1个回答
0
投票

使您的classB模拟为:

Mock(ClassB) {
    executeCommand(_, _) >> { c, e -> e.execute() }
}

即提供ClassB的executeCommand方法的模拟实现,该实现实际上调用interfaceE的execute方法。

© www.soinside.com 2019 - 2024. All rights reserved.