[英]Mockito NullPointer Exception for the method called on Mock Object
当第一个 when(creditApplicationCache.getObject("")).thenRetun(response) 被调用时,我得到了一个 NPE。 creditApplicationCache 为空。
但没有任何帮助。 CreditApplicationCache 未初始化。
@RunWith(MockitoJUnitRunner.class)
public class WebServiceClientTest {
@InjectMocks
WebServiceClientImpl webServiceClientImpl;
@Mock
private ApplicationCacheImpl creditApplicationCache;
/*@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}*/
@Test
public void testWebServiceClient() throws BusinessException, SystemException {
WebServiceClientImpl webServiceClientImpl = new WebServiceClientImpl();
CreditCardDetailsResponse creditCardDetailsResponse = new CreditCardDetailsResponse();
creditCardDetailsResponse.setAccountNumber("1234567");
when(creditApplicationCache.getObject("XXXXXXX")).thenReturn(creditCardDetailsResponse);
when(webServiceClientImpl.getCreditCardDetails("1234")).thenReturn(creditCardDetailsResponse);
CreditCardDetailsResponse mockResponse = webServiceClientImpl.getCreditCardDetails("1234");
assertEquals(creditCardDetailsResponse.toString(),mockResponse.toString());
}
}
---------------------------------------------------------------------------------------------------------
WebServiceClientImpl.java
public class WebServiceClientImpl implements WebServiceClient {
@Autowired
private ApplicationCache creditApplicationCache;
public CreditCardDetailsResponse getCreditCardDetails(String id)
throws BusinessException, SystemException {
// Some Code
CreditCardDetailsResponse response = null;
response = (CreditCardDetailsResponse) creditApplicationCache.getObject(cacheKey);
if (response == null) {
try {
// More Code }
return response ;
}
}
当您从org.junit.jupiter.api.Test
而不是org.junit.Test
导入@Test
时,可能会发生此问题。 您能确保您使用的是正确的@Test
注释吗?
您的问题是您在测试的第一行再次创建客户端: WebServiceClientImpl webServiceClientImpl = new WebServiceClientImpl();
@InjectMocks
已经构造了带注释的类,并注入了所有相关的模拟,但是你所做的是在没有它的情况下重新创建它,因此是 NPE。
只需删除该行,它应该可以工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.