Java 模拟toURI()方法时的断言失败错误

Java 模拟toURI()方法时的断言失败错误,java,unit-testing,exception,mockito,Java,Unit Testing,Exception,Mockito,我试图模拟FileObject.java类中的toURI()方法(该类属于org.openide.filesystems包) 方法声明如下所示: public final URI toURI() { // Compiled code } 到目前为止,我有以下测试代码: @Test public void test() throws Exception { String myUrl = "http://stackoverflow.com"; URI myURI = new

我试图模拟
FileObject.java
类中的
toURI()
方法(该类属于
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)行崩溃出现以下错误:

Testcase:test(myapp.logicLayer.LogicTest):失败的文件对象模拟 对于FileObject,hashCode:443290224从getFileSystem()返回null junit.framework.AssertionFailedError:FileObject的文件对象模拟, hashCode:443290224从getFileSystem()返回null

我尝试了多种解决方法,但找不到任何有效的方法

我甚至尝试使用
PowerMockito.stub(PowerMockito.method(FileObject.class,“toURI”).toReturn(myURI),但我得到了相同的错误,更不用说这应该在静态方法中使用,而事实并非如此

我使用的是Mockito 1.10.19。我在谷歌上搜索了一下,发现只有Mockito的版本2能够模拟final方法。我猜这可能是个问题,但我真的不确定

编辑:刚刚用Mockito 2.8.9进行了测试,问题仍然存在


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

之所以出现这个问题,是因为这是最后一种方法

因为Mockito2.1.0可以模拟最终的方法/类。来自Mockito:

很长一段时间,当Mockito拒绝时,我们的用户感到难以置信 模拟最后一节课。对最终方法的嘲弄更是如此 有问题,导致框架和 生成愤怒的故障排除。缺少嘲弄性的决赛是一个问题 Mockito自2007年成立以来的主要限制(…)it 可以通过mockito扩展机制创建文件来完成 src/test/resources/mockito extensions/org.mockito.plugins.MockMaker

为了实现最终的方法模拟,您应该创建文件
src/test/resources/mockito extensions/org.mockito.plugins.MockMaker
包含单行:


模拟生成器内联


mockito将能够模拟final方法。

之所以出现这个问题,是因为这是一个final方法

因为Mockito2.1.0可以模拟最终的方法/类。来自Mockito:

很长一段时间,当Mockito拒绝时,我们的用户感到难以置信 模拟最后一节课。对最终方法的嘲弄更是如此 有问题,导致框架和 生成愤怒的故障排除。缺少嘲弄性的决赛是一个问题 Mockito自2007年成立以来的主要限制(…)it 可以通过mockito扩展机制创建文件来完成 src/test/resources/mockito extensions/org.mockito.plugins.MockMaker

为了实现最终的方法模拟,您应该创建文件
src/test/resources/mockito extensions/org.mockito.plugins.MockMaker
包含单行:


模拟生成器内联


mockito将能够模拟最终的方法。

我仍然得到同样的错误。更新为mockito 2并添加了该文件,但问题仍然存在。我试着将文件放在不同的目录中,但在所有目录中都不起作用。你是在Maven项目中运行它吗?您是如何运行单元测试的?我使用您的代码进行了测试,并在添加了文件后进行了工作。不,我没有使用maven(虽然我知道我应该这样做,但至少现在我正在努力避免使用它)。相反,我从他们的GitHub页面下载了Powermock及其依赖项(已经带来了mockito jar文件)。我还向库中添加了mockito-inline.jar,但即使在那之后,它也不起作用。它应该缺少依赖性吗?我想这就是问题所在!路径
src/test/resources/
是maven的资源测试文件。我不知道在这种情况下配置文件应该在哪里(也许你在当前路径中创建了
mockito扩展名?)。。。我想我必须马上搬到马文去。当我完成测试后,我会设法运行测试,我会接受你的答案。非常感谢你的帮助!我还是会犯同样的错误。更新为mockito 2并添加了该文件,但问题仍然存在。我试着将文件放在不同的目录中,但在所有目录中都不起作用。你是在Maven项目中运行它吗?您是如何运行单元测试的?我使用您的代码进行了测试,并在添加了文件后进行了工作。不,我没有使用maven(虽然我知道我应该这样做,但至少现在我正在努力避免使用它)。相反,我从他们的GitHub页面下载了Powermock及其依赖项(已经带来了mockito jar文件)。我还向库中添加了mockito-inline.jar,但即使在那之后,它也不起作用。它应该缺少依赖性吗?我想这就是问题所在!路径
src/test/resources/
是maven的资源测试文件。我不知道在这种情况下配置文件应该在哪里(也许你在当前路径中创建了
mockito扩展名?)。。。我想我必须马上搬到马文去。当我完成测试后,我会设法运行测试,我会接受你的答案。非常感谢你的帮助!