如何为扩展Exception类的BusinessException创建存根

时间:2015-09-23 19:06:29

标签: java exception mockito

我正在尝试为异常类创建存根以返回一些字符串,但它没有返回该字符串值。错误

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);            
            }
        }

    }
}

有没有遗漏的东西?有人建议吗。

1 个答案:

答案 0 :(得分:0)

在评论中解决:

  

你为什么要嘲笑一个例外?为什么真正的BusinessException不起作用?

  

为什么使用thenThrow(BusinessException.class)代替thenThrow(mockBusinessException)

OP的评论, user3123934

  

在执行此操作后解析(ChecksUtil.initiateValidation(any(Request.class),any(Content.class)))。thenThrow(new BusinessException(“Error”));

当依赖项和可靠实现很少时,使用真实对象而不是模拟通常是有意义的。如果您确实使用了模拟,请确保您的系统在必要时使用模拟实例,方法是在构造函数,模拟或重写方法中提供它们。