Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 在powermock中使用可能的空值模拟方法_Java_Junit_Tdd_Mockito_Powermock - Fatal编程技术网

Java 在powermock中使用可能的空值模拟方法

Java 在powermock中使用可能的空值模拟方法,java,junit,tdd,mockito,powermock,Java,Junit,Tdd,Mockito,Powermock,作为操作的一部分,我有一种方法可以执行以下操作: URL resourceUrl = new File(sampleString1.concat("/") .concat(sampleString2)).toURI().toURL(); SampleString1和SampleString2由类的构造函数填充,该类是一个抽象类。我使用下面的行来测试这个类: servlet = PowerMockito.mock(MyServlet.class, Mockito.

作为操作的一部分,我有一种方法可以执行以下操作:

URL resourceUrl = new File(sampleString1.concat("/")
                .concat(sampleString2)).toURI().toURL();
SampleString1和SampleString2由类的构造函数填充,该类是一个抽象类。我使用下面的行来测试这个类:

servlet = PowerMockito.mock(MyServlet.class, Mockito.CALLS_REAL_METHODS);
通过这种方式,我无法设置属性sampleString1和sampleString2的值,因为我没有将它们传递给构造函数。现在,当我在servlet中调用我的测试方法时,由于sampleString1和sampleString2处的空值,我在上面提到的行中得到了NullPointerException。我试图通过以下方式模拟该部分:

 PowerMockito.whenNew(File.class).withParameterTypes(String.class).
                     withArguments(Matchers.anyString()).thenReturn(sampleFile);
但当新文件调用完成并抛出异常时,它仍然会通过字符串连接。如何测试此方法?我只想在调用新文件操作时为resourceUrl返回一个示例值,然后继续方法中的逻辑并测试输出


谢谢。

您可以在以下位置使用白盒API:

它使用反射来设置对象上的值,如下所示:

MyServlet servlet = PowerMockito.mock(MyServlet.class, Mockito.CALLS_REAL_METHODS);
Whitebox.setInternalState(servlet, "sampleString1", "foo");
Whitebox.setInternalState(servlet, "sampleString2", "bar");
//Test code...

我用我的代码Matt编辑了你的答案,但解决方案是一样的。。谢谢。不知道为什么,但我的编辑还没有出现,即使我添加了两次。。。。无论如何,解决方案是一样的,所以不必担心。。。谢谢。它显然被拒绝了,因为它看起来像一条评论。我看到了编辑,并相应地进行了更新。