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