3

我有一个StrictPartialMock(用创建的createStrictPartialMock(class, "method1"))。和一个正常的mockedObject.

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

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

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

4

1 回答 1

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 来完成,工作量会少很多

于 2011-06-27T13:05:43.017 回答