我试图为异常类创建stub以返回一些字符串,但它不返回该字符串值。有误差
java.lang.Exception: Unexpected exception, expected<ServiceException> but was<java.lang.NullPointerException>
下面是我使用
的示例代码BusinessException mockBusinessException =mock(BusinessException.class);
@Test(expected = ServiceException.class)
public void testValidateForRegistrationError() throws ServiceException, BusinessException{
when(ChecksUtil.initiateValidation(any(Request.class), any(Content.class))).thenThrow(BusinessException.class);
when(mockBusinessException.getMessage()).thenReturn("Error");
facadeBeanTest.createRegistration(RegistrationFacadeMock.getCreateRegistrationRequest());
}
BusinessException extends Exception
测试类
public class FacadeBean{
createRegistration(){
try{
}catch (BusinessException e) {
String err = e.getMessage(); -- Failed in this line(null pointer exception)
if(err.contains("Error") ){
throw new ServiceException(ServiceErrorConstants.CATALOG_NAME, err);
}
}
}
}
在注释中解析:
你为什么嘲笑一个异常?为什么真正的BusinessException不能工作?
和
为什么使用
thenThrow(BusinessException.class)
而不是thenThrow(mockBusinessException)
?
OP的评论,user3123934:
当(ChecksUtil.initiateValidation(any(Request.class), any(Content.class)))))完成后,就解决了。thenThrow(新BusinessException("错误"),
当依赖关系很少且实现可靠时,使用真实对象而不是模拟对象通常是有意义的。如果您确实使用了模拟,那么通过在构造函数、模拟或重写方法中提供模拟实例,确保被测系统在必要时使用模拟实例。