我有StrictPartialMock
(使用createStrictPartialMock(class, "method1")
创建)。和正常mockedObject
。
我想测试method1()
是否按顺序调用StrictPartialMock.method2()
,mockedObject.method1()
,StrictPartialMock.method3()
。
现在我读过我可以使用private IMocksControl ctrl = createStrictControl();
来创建一个可以检查模拟之间方法调用顺序的控件,但IMocksControl
不支持createPartialMock()
。
有没有办法将这两种技术结合起来?
答案 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
来完成,那将会减少工作量