[英]Nullpointer in a @Mock (mocking final static Hashtable) with Powermock
我有一个应用程序(使用注释的Spring MVC 4 + 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 androidCallBackController;
@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 androidCallBack() 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(androidCallBackController.performAndroidCallBack(allRequestParams), "alldevices");
}
}
但我在这一行中有一个java.lang.NullPointerException:
日期lastsmsSend = SMS_NOTIFICATION.get(deviceEvent.getDevice()。getKey());
您不能使用Mockito注入静态变量和最终变量。 要么删除这些值,要么创建一个实际值而不是一个模型。
如前所述-Mockito无法将模拟注入静态字段(我特别没有提到final字段,因为PowerMock删除了final修饰符)。
您可以使用以下方法绕过限制:
Whitebox.setInternalState(AndroidBackController.class, "SMS_NOTIFICATION", smsNnotification);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.