products数据库是hashMap,输出是enum,scanCode来自测试的类
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()就是这样工作的。
Stacktrace:
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
。
如果您无法删除静态:使用Mockito 模拟静态方法
您不能用Mockito模拟static
方法;你需要PowerMock。