0

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

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 的值为空,我在上述行中得到 NullPointerExceptions。我尝试通过以下方式模拟该部分:

 PowerMockito.whenNew(File.class).withParameterTypes(String.class).
                     withArguments(Matchers.anyString()).thenReturn(sampleFile);

但是当新文件调用完成并引发异常时,它仍然会通过字符串连接。我该如何测试这种方法?我只想在调用新文件操作时返回 resourceUrl 的示例值,并继续执行方法中的逻辑并测试输出。

谢谢。

4

1 回答 1

1

您可以使用在以下位置记录的 Whitebox API:

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

MyServlet servlet = PowerMockito.mock(MyServlet.class, Mockito.CALLS_REAL_METHODS);
Whitebox.setInternalState(servlet, "sampleString1", "foo");
Whitebox.setInternalState(servlet, "sampleString2", "bar");
//Test code...
于 2012-07-06T17:27:58.637 回答