带有MocksControl的createPartialMock

时间:2011-06-27 12:00:55

标签: java easymock powermock

我有StrictPartialMock(使用createStrictPartialMock(class, "method1")创建)。和正常mockedObject

我想测试method1()是否按顺序调用StrictPartialMock.method2()mockedObject.method1()StrictPartialMock.method3()

现在我读过我可以使用private IMocksControl ctrl = createStrictControl();来创建一个可以检查模拟之间方法调用顺序的控件,但IMocksControl不支持createPartialMock()

有没有办法将这两种技术结合起来?

1 个答案:

答案 0 :(得分:0)

我目前通过扩展我正在测试的类来解决这个问题。我之所以这样做是因为我的考试班级是abstract,但我想这是可能的,只要它不是final

@test
public voide testCase() {
    IMocksControl ctrl = createStrictControl();
    OrderTester mockedOrderTester = ctrl.createMock(OrderTester.class);
    MyObject mockedMyObject = ctrl.createMock(MyObject.class);
    mockedOrderTester.method2()
    expectLastCall();
    mockedMyObject .method1()
    expectLastCall();
    mockedOrderTester.method3()
    expectLastCall();
    ctrl.replay();
    ClassUnderTestExt testClass = new ClassUnderTestExt();
    testClass.ot = mockedOrderTester;
    testClass.mo = mockedMyObject;
    testClass.method1();
    ctrl.verify();
}


class ClassUnderTestExt extends ClassUnderTest<String> {
    public OrderTester ot;
    public MyObject mo;

    @Override
    public void writeOutput(String data) {
    }

    @Override
    public void method2() {
        super.method2();
        ot.method2();
    }

    @Override
    public void method3() {
        super.method3();
        ot.method3();
    }
}

class OrderTester {
    public void method2() {
    }

    public void method3() {
    }
}

请注意,您可以省略super.methodX();来模拟真正的偏模。

但这种解决方案远非完美。如果可以通过部分模拟和IMocksControl

来完成,那将会减少工作量