Java Mockito when()…then()NullPointerException

Java Mockito when()…then()NullPointerException,java,junit,mockito,Java,Junit,Mockito,ProductsInDatabase是一个hashMap,输出是enum,扫描代码来自被测试的类 public static boolean isInDataBase(int code) { return productsInDatabse.containsKey(code); } 我有一个测试: @Test public void testScanCodeForCodeNotFound() { Database db = Mockito.mock(Da

ProductsInDatabase是一个hashMap,输出是enum,扫描代码来自被测试的类

   public static boolean isInDataBase(int code) {
        return productsInDatabse.containsKey(code);
    }
我有一个测试:

@Test
public void testScanCodeForCodeNotFound() {

    Database db = Mockito.mock(Database.class);
    when(db.isInDataBase(444)).thenReturn(false);
    output = scanner.scanCode("444");
    assertTrue(output == ProductProcessing.PRODUCT_NOT_FOUND);

}
但当()返回时,则()返回NPE。我在调用时看到的示例与此完全相同。所以我的问题是bug在哪里,因为我认为when()…then()是这样工作的

堆栈跟踪:

Testcase: testScanCodeForCodeNotFound(iodevices.BarCodesScannerTest):   Caused an ERROR
null
java.lang.NullPointerException
    at database.Database.isInDataBase(Database.java:66)
    at iodevices.BarCodesScannerTest.testScanCodeForCodeNotFound(BarCodesScannerTest.java:50)
    at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
    at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)


Test iodevices.BarCodesScannerTest FAILED

isInDataBase()声明中删除
static


如果无法删除静态项,请参见此项:

isInDataBase()声明中删除
static


如果无法删除静态方法,请查看以下内容:

不能使用Mockito模拟
静态方法;你需要这样做。

你不能用Mockito模拟
静态方法;您需要这样做。

请添加stacktrace。方法
isInDataBase
final吗?不,它是公共静态布尔isInDataBase(int-code),您正在从非静态上下文调用静态方法。此外,您不能模拟静态方法。请使用添加堆栈跟踪。方法
isInDataBase
final吗?不,您从非静态上下文调用静态方法的是公共静态布尔isInDataBase(int-code)。此外,您不能模拟静态方法