我想测试一个抽象类。当然,我可以手动编写一个继承该类的模拟。
我能否使用一个mocking框架(我正在使用Mockito)来代替手工制作我的mock?如何操作?
@RunWith(MockitoJUnitRunner.class)
public class ClassUnderTest_Test {
private ClassUnderTest classUnderTest;
@Mock
MyDependencyService myDependencyService;
@Before
public void setUp() throws Exception {
this.classUnderTest = getInstance();
}
private ClassUnderTest getInstance() {
return new ClassUnderTest() {
private ClassUnderTest init(
MyDependencyService myDependencyService
) {
this.myDependencyService = myDependencyService;
return this;
}
@Override
protected void myMethodToTest() {
return super.myMethodToTest();
}
}.init(myDependencyService);
}
}
ClassUnderTest
的属性 myDependencyService
的可见性必须为protected
。在这种情况下,PowerMock的Whitebox.invokeMethod(..)
非常方便。
mock(MyAbstractClass.class, withSettings().useConstructor(arg1, arg2).defaultAnswer(CALLS_REAL_METHODS))
来模拟需要构造函数参数的抽象类。 - Gediminas Rimsa