我目前通过扩展我正在测试的类来解决这个问题。我已经这样做了,因为我的测试课是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 来完成,工作量会少很多