Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Mockito中模拟instanceof_Java_Unit Testing_Mocking_Mockito - Fatal编程技术网

Java 如何在Mockito中模拟instanceof

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"); 如何模拟此代码?听起来您需要 请注意,它有自

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

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)