Java EasyMock在一个方法中处理多个异常

Java EasyMock在一个方法中处理多个异常,java,easymock,Java,Easymock,在我的代码中,我导出了一个BusinessServiceException。在这个BusinessServiceException的Catch块中,它抛出了另一个RestValidationException。我无法处理这个RestValidation异常。我得到的错误是意外的RestValidationException。 请帮忙 try { if(null == identityProxy.getIdentityProxy() || null == identityProxy

在我的代码中,我导出了一个BusinessServiceException。在这个BusinessServiceException的Catch块中,它抛出了另一个RestValidationException。我无法处理这个RestValidation异常。我得到的错误是意外的RestValidationException。 请帮忙

try {
        if(null == identityProxy.getIdentityProxy() || null == identityProxy.getIdentityProxyType() || identityProxy.getIdentityProxy().isEmpty() || identityProxy.getIdentityProxyType().isEmpty()){
            throw new RestValidationException(RestErrorCodes.INVALID_IDENTITY_PROXY.toString());
        }
        restValidations.validIdentityProxy(identityProxy.getIdentityProxy(),identityProxy.getIdentityProxyType());
        if(userHelper.addUserIdentityProxy(partnerId, userId,identityProxy.getIdentityProxy(),identityProxy.getIdentityProxyType(), null, 30L,true)) {
            successResponseVO.setSuccess(RESTConstants.TRUE);
        } else {
            successResponseVO.setSuccess(RESTConstants.FALSE);
        }
    } catch (BusinessServiceException be) {
        try{
             if(be.getNewInformationCode().equalsIgnoreCase(BusinessErrorCodes.UNIQUE_PROXY_PHONE_ERROR.toString())){
                    throw new RestValidationException(RestErrorCodes.VALIDATION_UNIQUE_PHONE_PROXY.toString());}
                 else if(be.getNewInformationCode().equalsIgnoreCase(BusinessErrorCodes.UNIQUE_PROXY_EMAIL_ERROR.toString())){
                     throw new RestValidationException(RestErrorCodes.VALIDATION_UNIQUE_EMAIL_PROXY.toString());
                 }else if(be.getNewInformationCode().equalsIgnoreCase(BusinessErrorCodes.UNIQUE_PROXY_LOYALTY_ERROR.toString())){
                     throw new RestValidationException(RestErrorCodes.VALIDATION_UNIQUE_LOYALTY_PROXY.toString());
                 }else{
                     throw new BusinessServiceException(partnerId, "Error in UserRestController : updateUser()", be, be.getNewInformationCode(), params);
                 } 
            }catch(RestValidationException ve){
                throw new RestValidationException(partnerId, "Error in UserRestController : updateUser()", ve, ve.getNewInformationCode(), params);
            }

        }catch (RestValidationException ve){
            throw new RestValidationException(partnerId, "Error in UserRestController : updateUser()", ve, ve.getNewInformationCode(), params);
        }  catch (Exception e) {
            throw new RestInternalErrorException(partnerId, "Error in UserRestController : updateUser()", e, null, params);
        } 

    return successResponseVO;
}
EasyMock代码:

   @Test(expected = BusinessServiceException.class)
    public void testUpdateUserDetailBusinessServiceExceptionEmail() throws BusinessException, RestValidationException,RestInternalErrorException {

        UserDetailVO userDetailVO = new UserDetailVO();
        UserDetail userDetail = new UserDetail();
        userDetail.setPhoneNumber("04828229279");
        userDetail.setEmail("divya@gmail.com");
        String deliveryType = "deliveryType";
        List<UserDeliveryPreference> userDeliveryPreference = new ArrayList<UserDeliveryPreference>();
        UserDeliveryPreference e = new UserDeliveryPreference();
        e.setDeliveryType(deliveryType);
        userDeliveryPreference.add(e);
        userDetail.setUserDeliveryPreference(userDeliveryPreference);
        userDetail.setSendDigitalReceipt("never");
        UserEvent userEvent = new UserEvent();
        userEvent.setEventType(EventsType.UserPreferenceUpdate.toString());
        userEvent.setPartnerId(partnerId);
        userEvent.setUserId(userId);
        userEvent.setTimestamp(new Date());
        userEvent.setChannel(Channel.rest.toString());
        EasyMock.expect(request.getHeader("x-forwarded-for")).andReturn("x-forwarded-for");
        EasyMock.expect(request.getHeader("user-agent")).andReturn("user-agent");
        Map<String, String> details = new HashMap<String, String>();
        details.put(RESTConstants.IP_ADDRESS, "x-forwarded-for");
        details.put(RESTConstants.HTTP_USER_AGENT, "user-agent");
        details.put(RESTConstants.APPID, "4567");
        userEvent.setDetails(details);
        EasyMock.expect(restValidations.validateDeliveryPreference(userDetailVO)).andReturn(true);
        EasyMock.expect(userHelper.populateuserDetail(userDetailVO)).andReturn(userDetail);
        EasyMock.expect( restValidations.isAllRequiredFieldExistsForUserUpdate(userDetail)).andReturn(true);
        EasyMock.expect(restValidations.validatePhonePattern("04828229279")) .andReturn(true);
        EasyMock.expect(restValidations.validateEmailPattern("divya@gmail.com")).andReturn(true);
        EasyMock.expect( restValidations.validDeliveryPreference(userDeliveryPreference)) .andReturn(true);
        EasyMock.expect(restValidations.validateOptin("never")).andReturn("never");
        String newInformationCode = BusinessErrorCodes.UNIQUE_PROXY_EMAIL_ERROR.toString();
        Serializable[] params = null;
        try {
            EasyMock.expect(userHelper.updateUserDetail(EasyMock.same(userId),EasyMock.same(partnerId),EasyMock.isA(UserDetail.class),EasyMock.isA(UserEvent.class))).andThrow( new BusinessServiceException(partnerId, "fails", null, newInformationCode, params));
            EasyMock.replay(userHelper, request, restValidations);
            userController.updateUser(partnerId, userId, "4567", "1.0", "nonce", userDetailVO, request);
        } finally {
            EasyMock.verify(userHelper, request, restValidations);
        }
    }
@Test(预期=BusinessServiceException.class)
public void testUpdateUserDetailBusinessServiceExceptionEmail()引发BusinessException、RestValidationException、RestInternalErrorException{
UserDetailVO UserDetailVO=新的UserDetailVO();
UserDetail UserDetail=新的UserDetail();
userDetail.setPhoneNumber(“04828229279”);
userDetail.setEmail(“divya@gmail.com");
字符串deliveryType=“deliveryType”;
List userDeliveryPreference=new ArrayList();
UserDeliveryPreference e=新的UserDeliveryPreference();
e、 setDeliveryType(deliveryType);
userDeliveryPreference.add(e);
setUserDeliveryPreference(userDeliveryPreference);
userDetail.setSendDigitalReceive(“从不”);
UserEvent UserEvent=新的UserEvent();
userEvent.setEventType(EventsType.UserPreferenceUpdate.toString());
userEvent.setPartnerId(partnerId);
userEvent.setUserId(userId);
setTimestamp(新日期());
setChannel(Channel.rest.toString());
expect(request.getHeader(“x-forwarded-for”).andReturn(“x-forwarded-for”);
expect(request.getHeader(“用户代理”)).andReturn(“用户代理”);
Map details=newhashmap();
详细信息。put(restctants.IP_地址,“x-forwarded-for”);
put(restcontents.HTTP_USER_AGENT,“USER AGENT”);
details.put(restcontents.APPID,“4567”);
userEvent.setDetails(详细信息);
expect(restValidations.validateDeliveryPreference(userDetailVO)).andReturn(true);
expect(userHelper.populateuserDetail(userDetailVO)).andReturn(userDetail);
expect(restValidations.isAllRequiredFieldExistsfourserUpdate(userDetail)).andReturn(true);
expect(restValidations.validatePhonePattern(“04828229279”)).andReturn(true);
expect(restValidations.validateEmailPattern(“divya@gmail.com“”),并返回(真);
expect(restValidations.validDeliveryPreference(userDeliveryPreference)).andReturn(true);
expect(restValidations.validateOptin(“从不”)).andReturn(“从不”);
字符串newInformationCode=BusinessErrorCodes.UNIQUE_PROXY_EMAIL_ERROR.toString();
可序列化[]参数=null;
试一试{
expect(userHelper.updateUserDetail(EasyMock.same(userId)、EasyMock.same(partnerId)、EasyMock.isA(UserDetail.class)、EasyMock.isA(UserEvent.class)))和row(newBusinessServiceException(partnerId,“fails”、null、newInformationCode、params));
replay(userHelper、请求、restValidations);
updateUser(partnerId,userId,“4567”,“1.0”,“nonce”,userDetailVO,request);
}最后{
验证(userHelper、请求、restValidations);
}
}

您的测试似乎期望抛出错误的异常类型

更改:

@Test(expected = BusinessServiceException.class)
public void testUpdate(parameters){
致:


你的更新方法看起来有点奇怪。为什么要抛出RestValidationException,捕捉到它然后什么也不做?@JamesB我想OP为了简洁起见删除了代码。@DanTemple Hope so:-)你能给我们展示一下整个测试方法吗?嗨…我上传了完整的代码..请检查并帮助。谢谢你的回复。我理解的是我们在addThrrow()和expect()中抛出了哪个异常,应使用@Test符号指定。我写@Test(expected=RestValidationException.class)意外的RestValidationException但得到了BusinessServiceException测试注释中的预期值是被测试方法抛出的异常类型-即更新。谢谢..我在发布此问题时理解的是错误的。“测试注释中的预期值是被测试方法抛出的异常类型”是正确的概念。现在我的代码工作正常。再次感谢。@user3763375没问题,很高兴提供帮助。
@Test(expected = RestValidationException.class)
public void testUpdate(parameters){