0

フィードバックを受け取るために使用される次@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);
}
4

1 に答える 1

0

validateEmailパッケージのプライベート可視性を使用して直接テストできます。caseモックでcatchテストできますmailSender(本当に必要な場合は もFeedback)。

それがユニットテストできるものです。他のすべては統合テストです。非常に異なる設定を使用して多くの異なる構成でメールを送信するアプリを作成している場合は、テストします。1 つの構成と 1 つの会社の smtp サーバーのみを使用していて、将来変更される可能性が低い場合は、自動メール送信テストをセットアップする価値がない可能性があります。

于 2015-09-22T06:20:31.287 に答える