我试图从toURI()
类(这个类属于FileObject.java
包)模拟org.openide.filesystems
方法。
方法声明如下:
public final URI toURI() {
// Compiled code
}
到目前为止,我有这个测试代码:
@Test
public void test() throws Exception {
String myUrl = "http://stackoverflow.com";
URI myURI = new URI(myUrl);
FileObject mocked = Mockito.mock(FileObject.class);
Mockito.when(mocked.toURI()).thenReturn(myURI);
assertEquals(myURI, mocked.toURI());
}
但是,当我运行测试时,它会在Mockito.when(mocked.toURI()).thenReturn(myURI);
行中崩溃并出现以下错误:
测试用例:test(myapp.logicLayer.LogicTest):FAILED文件对象Mock for FileObject,hashCode:443290224从getFileSystem()返回null junit.framework.AssertionFailedError:文件对象Mock for FileObject,hashCode:443290224从getFileSystem()返回null
我尝试了多种解决方法,但找不到任何有用的方法。
我甚至尝试使用PowerMockito.stub(PowerMockito.method(FileObject.class, "toURI")).toReturn(myURI);
,但我得到了同样的错误,更不用说这应该在静态方法中使用,但事实并非如此。
我正在使用Mockito 1.10.19。我用Google搜索并设法看到只有Mockito的第2版能够模拟最终方法。我的猜测是这可能是问题,但我真的不确定。
编辑:刚刚使用Mockito 2.8.9进行测试,问题仍然存在。
有人知道这里有什么问题吗?
这个问题正在发生,因为这是最后一种方法。
由于Mockito 2.1.0可以模拟最终的方法/类。来自Mockito documentation:
很长一段时间,当Mockito拒绝嘲笑最后一堂课时,我们的用户都难以置信。最终方法的模拟甚至更成问题,导致框架的令人惊讶的行为并产生愤怒的故障排除。自2007年成立以来,缺乏模拟决赛是Mockito的主要限制(...)它可以通过mockito扩展机制通过创建文件src / test / resources / mockito-extensions / org.mockito.plugins来完成。 MockMaker
为了实现最终方法模拟,你应该创建包含单行的文件qazxsw poi:
src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
而mockito将能够模拟最终方法。