如何在 Mockito 中模拟实例

2022-09-03 17:59:35

我有一段代码,我想用Mockito测试:

mockedClass instanceof SampleInterface

被模拟的抽象类:,并且是一个接口。这是失败点:mockedClassMockedClassSampleInterface

Validate.isTrue(mockedClass instanceof SampleInterface, "The mockedClass is not a SampleInterface");

如何模拟此代码?


答案 1

听起来你需要MockSettings.extraInterfaces

MockedClass mockedClass = mock(MockedClass.class,
    withSettings().extraInterfaces(SampleInterface.class));

请注意,它带有自己的警告标签:

这个神秘的功能应该偶尔使用。被测对象应该确切地知道其协作者和依赖关系。如果你碰巧经常使用它,请确保你真的在制作简单,干净和可读的代码。

作为替代方法,创建一个用于测试的接口,该接口扩展了您希望模拟实现的所有接口,并以通常的方式模拟该接口。

public abstract class ForTest implements SampleInterface {}

MockedClass mockedClass = mock(ForTest.class);

答案 2

除了其他答案:

如果可能的话,你应该改用模拟界面,这意味着创建这样的模拟:

SampleInterface mockedClass = mock(SampleInterface.class); // not mock(MockedClass)

推荐