Java 如何在Mockito中模拟instanceof
我有一段代码,我想用Mockito测试:Java 如何在Mockito中模拟instanceof,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我有一段代码,我想用Mockito测试: mockedClass instanceof SampleInterface mockedClass是mocked抽象类:mockedClass,而SampleInterface是一个接口。这是失败的一点: Validate.isTrue(mockedClass instanceof SampleInterface, "The mockedClass is not a SampleInterface"); 如何模拟此代码?听起来您需要 请注意,它有自
mockedClass instanceof SampleInterface
mockedClass
是mocked抽象类:mockedClass
,而SampleInterface
是一个接口。这是失败的一点:
Validate.isTrue(mockedClass instanceof SampleInterface, "The mockedClass is not a SampleInterface");
如何模拟此代码?听起来您需要
请注意,它有自己的警告标签:
这种神秘的特征应该偶尔使用。被测试对象应该确切地知道它的合作者和依赖关系。如果您碰巧经常使用它,请确保您确实生成了简单、干净且可读的代码
作为替代方案,创建一个用于测试的接口,该接口扩展了您希望您的模拟实现的所有接口,并以通常的方式进行模拟
public abstract class ForTest implements SampleInterface {}
MockedClass mockedClass = mock(ForTest.class);
除了另一个答案外: 如果可能的话,您应该模拟接口,这意味着像这样创建模拟:
SampleInterface mockedClass = mock(SampleInterface.class); // not mock(MockedClass)
只是澄清一下,
mockedClass
是类型为mockedClass
(即mock(mockedClass.class)
)的模拟实例,并且mockedClass
实现了SampleInterface
?实现mockedClass的类实现了这个接口。我没有写一个重要的信息:mockedClass是一个抽象类,像mock(mockedClass.class)一样被模拟。我想我使用的是旧版本的Mockito,其中withSettings()不可用。但这就是我搜索的!很乐意帮忙!从2009年左右的Mockito 1.8开始,这些功能都是新的,因此可能值得升级到。Mockito的最新版本是1.10,2.0即将发布,值得一试。
SampleInterface mockedClass = mock(SampleInterface.class); // not mock(MockedClass)