我有一段代码,想要使用Mockito进行测试:
mockedClass instanceof SampleInterface
mockedClass
是被模拟的抽象类:MockedClass
,而 SampleInterface
是一个接口。这是失败的关键点:
Validate.isTrue(mockedClass instanceof SampleInterface, "The mockedClass is not a SampleInterface");
如何模拟这段代码?
我有一段代码,想要使用Mockito进行测试:
mockedClass instanceof SampleInterface
mockedClass
是被模拟的抽象类:MockedClass
,而 SampleInterface
是一个接口。这是失败的关键点:
Validate.isTrue(mockedClass instanceof SampleInterface, "The mockedClass is not a SampleInterface");
如何模拟这段代码?
看起来您需要使用MockSettings.extraInterfaces
方法。
MockedClass mockedClass = mock(MockedClass.class,
withSettings().extraInterfaces(SampleInterface.class));
注意,它带有自己的警告标签:
这个神秘的功能应该非常偶尔地使用。被测试对象应该清楚地知道它的合作者和依赖项。如果你经常使用它,请确保你真正产生了简单、清晰和可读的代码。
作为替代方案,创建一个测试接口,扩展所有你想要模拟实现的接口,并以通常的方式进行模拟。
public abstract class ForTest implements SampleInterface {}
MockedClass mockedClass = mock(ForTest.class);
除了其他答案之外:
如果可能的话,最好模拟接口,也就是像这样创建模拟:
SampleInterface mockedClass = mock(SampleInterface.class); // not mock(MockedClass)
mockedClass
是MockedClass
类型的模拟实例(即mock(MockedClass.class)
),而MockClass
实现了SampleInterface
接口吗? - Jonathan