在模拟对象上调用的方法的 Mockito NullPointer 异常
Mockito NullPointer Exception for the method called on Mock Object
当第一次调用 when(creditApplicationCache.getObject("")).thenRetun(response) 时,我遇到了 NPE。 creditApplicationCache 为空。
- 我正在使用 mockito 2。17.jar。
- 我添加了@RunWith(MockitoJUnitRunner.class).
- 我也尝试过 MockitoAnnotations.initMocks(this)。
但没有任何帮助。 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
已经构建了带注释的 class,并注入了所有相关的模拟,但是您所做的是 re-create 它没有它,因此是 NPE。
只需删除该行即可
当第一次调用 when(creditApplicationCache.getObject("")).thenRetun(response) 时,我遇到了 NPE。 creditApplicationCache 为空。
- 我正在使用 mockito 2。17.jar。
- 我添加了@RunWith(MockitoJUnitRunner.class).
- 我也尝试过 MockitoAnnotations.initMocks(this)。
但没有任何帮助。 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
已经构建了带注释的 class,并注入了所有相关的模拟,但是您所做的是 re-create 它没有它,因此是 NPE。
只需删除该行即可