java - stub 时 PowerMockito NullPointerException

标签 java exception static powermockito

我想使用以下测试代码对 java.nio.file.Files 中的公共(public)静态函数 readAllBytes 进行 stub 。

@PrepareForTest(Files.class)
public void testGetNotExistingRestFile() throws Exception {
    PowerMockito.mockStatic(Files.class);
    PowerMockito.doThrow(mock(IOException.class)).when(Files.readAllBytes(any(Path.class)));
}

每次抛出 NullPointerException 时,我都能弄清楚我做错了什么。

java.lang.NullPointerException
at java.nio.file.Files.provider(Files.java:67)
at java.nio.file.Files.newByteChannel(Files.java:317)
at java.nio.file.Files.newByteChannel(Files.java:363)
at java.nio.file.Files.readAllBytes(Files.java:2981)
at nl.mooij.bob.RestFileProviderTest.testGetNotExistingRestFile(RestFileProviderTest.java:53)

如何使用 PowerMockito stub java.nio.file.Files 中的 readAllBytes 函数?

最佳答案

调用 Mockito,而不是 PowerMockito 并反转 stub 顺序:

@Test(expected=IOException.class)
@PrepareForTest(Files.class)
public void testGetNotExistingRestFile() throws Exception {
    // arrange
     PowerMockito.mockStatic(Files.class);
     Mockito.when(Files.readAllBytes(Matchers.any(Path.class))).thenThrow(Mockito.mock(IOException.class));
    // act
     Files.readAllBytes(Mockito.mock(Path.class));
}

另一种可能是:

   @Test(expected=IOException.class)
   @PrepareForTest(Files.class)
   public void testGetNotExistingRestFile() throws Exception {
     // arrange
       PowerMockito.mockStatic(Files.class);
       Files filesMock = PowerMockito.mock(Files.class);
       Mockito.when(filesMock.readAllBytes(Matchers.any(Path.class))).thenThrow(Mockito.mock(IOException.class));
     // act   
       filesMock.readAllBytes(Mockito.mock(Path.class));
   }

引用:Using PowerMockito to Mock Final and Static Methods

关于java - stub 时 PowerMockito NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29583236/

相关文章:

java - 为什么 Eclipse 控制台不显示日志范围结果

java - lombok.config 上的 addLombokGeneratedAnnotation 不会忽略 Jacoco 报告上的 Lombok Annotations

java - ms sql microsoft的jdbc驱动和jTDS的驱动的区别

python - 当比较不同的数据类型时,我可以让 Python 抛出异常吗?

java - 如何从另一个类访问静态变量?

java - 如何在 JNI 中将 C 结构来回传递给 Java 代码?

c# - 在 C# 中使用字典时出错

java - 如何在 lblText.steText() 中设置预定义消息

java - 总是需要做静态

android - 使用公共(public)静态字段/变量有什么不好吗?