当调用第一个when(creditApplicationCache.getObject("((.thenRetun(response(时,我得到了一个NPE。creditApplicationCache为null。
- 我使用的是mockito 2.17.jar
- 我添加了@RunWith(MockitoJUnitRunner.class(
- 我也试过使用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
注释吗?