模拟toURI()方法时的AssertionFailedError

问题描述 投票:0回答:1

我试图从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进行测试,问题仍然存在。

有人知道这里有什么问题吗?

java unit-testing exception mockito
1个回答
3
投票

这个问题正在发生,因为这是最后一种方法。

由于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将能够模拟最终方法。

© www.soinside.com 2019 - 2024. All rights reserved.