我正在尝试为异常类创建存根以返回一些字符串,但它没有返回该字符串值。错误
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);
}
}
}
}
有没有遗漏的东西?有人建议吗。
答案 0 :(得分:0)
在评论中解决:
你为什么要嘲笑一个例外?为什么真正的BusinessException不起作用?
和
为什么使用
thenThrow(BusinessException.class)
代替thenThrow(mockBusinessException)
?
OP的评论, user3123934 :
在执行此操作后解析(ChecksUtil.initiateValidation(any(Request.class),any(Content.class)))。thenThrow(new BusinessException(“Error”));
当依赖项和可靠实现很少时,使用真实对象而不是模拟通常是有意义的。如果您确实使用了模拟,请确保您的系统在必要时使用模拟实例,方法是在构造函数,模拟或重写方法中提供它们。