带Powermock的@Mock(模拟最终静态哈希表)中的java空指针
我有一个应用程序(SpringMVC4+Hibernate/JPA+MySQL+Maven集成示例使用注释),使用基于注释的配置将Spring与Hibernate集成
我有一个控制器:
public class AndroidBackController {
protected static final Logger LOGGER = LoggerFactory.getLogger(AndroidBackController.class);
private static final Hashtable<String, Date> SMS_NOTIFICATION = new Hashtable<String, Date>();
@RequestMapping(value = { "/sigfoxCallBack" }, method = RequestMethod.GET)
public String performAndroidCallBack(@RequestParam Map<String, String> allRequestParams) throws ClientProtocolException, IOException {
Date lastsmsSend = SMS_NOTIFICATION.get(deviceEvent.getDevice().getKey());
..
}
and this Test:
public class AndroidBackControllerTest {
@InjectMocks
AndroidBackController 安卓CallBackController;
@Mock
DeviceService deviceService;
@Mock
DeviceEventService deviceEventService;
@Mock
Hashtable<String, Date> SMS_NOTIFICATION = new Hashtable<String, Date>();
@Mock
Map<String, String> allRequestParams;
@BeforeClass
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void 安卓CallBack() throws ClientProtocolException, IOException {
PowerMockito.mockStatic(Hashtable.class);
Device device = new Device();
DeviceType deviceType = new DeviceType();
deviceType.setType("SMARTEVERYTHING_KIT");
device.setDeviceType(deviceType);
when(allRequestParams.get("devideId")).thenReturn("E506");
when(allRequestParams.get("rssi")).thenReturn("155.55");
when(SMS_NOTIFICATION.get("E506")).thenReturn(new Date());
when(deviceService.findByKey("E506")).thenReturn(device);
Assert.assertEquals(安卓CallBackController.performAndroidCallBack(allRequestParams), "alldevices");
}
}
但是我有一个java。此行中的lang.NullPointerException:
Date lastsmsSend=SMS\u通知。获取(deviceEvent.getDevice()。getKey())强>
# 1 楼答案
如前所述,Mockito不能将mock注入静态字段(我没有提到final字段,因为PowerMock移除final修饰符)
您可以使用以下方法绕过限制:
# 2 楼答案
不能使用mockito注入静态变量和最终变量。要么删除这些,要么创建一个真正的价值,而不是一个模型