繁体   English   中英

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

[英]Mockito NullPointer Exception for the method called on Mock Object

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

  1. 我正在使用 mockito 2.17.jar。
  2. 我添加了@RunWith(MockitoJUnitRunner.class)。
  3. 我也试过 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已经构造了带注释的类,并注入了所有相关的模拟,但是你所做的是在没有它的情况下重新创建它,因此是 NPE。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM