我想测试一个抽象类。当然,我可以手动编写一个从类继承的模拟。
我可以使用模拟框架(我正在使用Mockito)来执行此操作,而不是手工制作模拟吗?怎么样?
以下建议让你在不创建“真实”子类的情况下测试抽象类-Mock 是子类。
使用Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS),然后模拟所有被调用的抽象方法。
Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS)
例:
public abstract class My { public Result methodUnderTest() { ... } protected abstract void methodIDontCareAbout(); } public class MyTest { @Test public void shouldFailOnNullIdentifiers() { My my = Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS); Assert.assertSomething(my.methodUnderTest()); } }
注意:此方法的好处是,你不具备实现的抽象方法,只要他们永远不会被调用。
在我看来,这比使用间谍更整洁,因为间谍需要一个实例,这意味着你必须创建抽象类的可实例化子类。