不确定如何测试电子邮件收到反馈的课程

时间:2015-09-22 05:17:12

标签: java spring junit mail-sender

我有以下用于接收反馈的@Service类,根据条件列表验证其详细信息。如果经过验证,请将其发送给收件人。

我正在努力为这个课写一个测试用例。我知道没有必要使用Junit测试外部服务。就像在我的情况下发送电子邮件一样,

  • 测试这门课的最佳方法是什么?
  • 我应该测试一下吗?
    • 如果不是为什么?
    • 如果是,如何完成测试用例?

代码

@Service
public class FeedbackServiceImpl implements FeedbackService {

    @Autowired
    private MailSender mailSender;

    @Override
    public boolean sendIt(Feedback feedback)
            throws MailAuthenticationException, CustomException {
        validateEmail(feedback.getEmail());
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            switch (feedback.getRecipient()) {
            case 1:
                message.setTo("jack@project.com"); 
                break;
            case 2:
                message.setTo("norman@project.com");
                break;
            default:
                message.setTo("hello@project.com");
                break;
            }

            message.setCc(feedback.getEmail());
            message.setSubject(subject);
            message.setText(msg);
            mailSender.send(message);

        } catch (MailSendException send) { 
            System.err.println(send.getFailedMessages() + " "
                    + send.getMessage() + " " + feedback);
        }
        return true;

    }

    private void validateEmail(String sender) throws CustomException {
       //make sure provided email is valid
      //this method does verification process against different criteria

    }

}

JUnit的

@Test
public void shouldReturnFalseForInvalidFeedbackEmail(){
    MailSender mailSender = Mockito.mock(MailSender.class);
    FeedbackService feedbackSrv = new FeedbackServiceImpl();
    boolean result = feedbackSrv.sendIt(feedback);
    assertTrue(result);
}

1 个答案:

答案 0 :(得分:0)

validateEmail可以使用包私有可见性直接测试。 casecatch可以通过模拟mailSender进行测试(如果真的有必要Feedback)。

这就是你可以单元测试的东西。其他一切都是集成测试。如果您使用非常不同的设置制作应用程序以发送具有许多不同配置的电子邮件,那么我会测试它。如果您只使用一个配置和一个公司smtp服务器,并且将来不太可能更改,那么可能不值得设置自动邮件测试