Mock对象上调用的方法的Mockito NullPointer异常



当调用第一个when(creditApplicationCache.getObject("((.thenRetun(response(时,我得到了一个NPE。creditApplicationCache为null。

  1. 我使用的是mockito 2.17.jar
  2. 我添加了@RunWith(MockitoJUnitRunner.class(
  3. 我也试过使用MockitoAnnotations.intMocks(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 ;
}
}

您的问题是在测试的第一行再次创建客户端:WebServiceClientImpl webServiceClientImpl = new WebServiceClientImpl();

@InjectMocks已经构造了带注释的类,并注入了所有相关的mock,但您要做的是在没有它的情况下重新创建它,从而创建NPE。

只需删除该行,它就可以工作

org.junit.jupiter.api.Test而不是org.junit.Test导入@Test时,可能会出现此问题。您能确保使用正确的@Test注释吗?

最新更新