我有以下用于接收反馈的@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);
}
答案 0 :(得分:0)
validateEmail
可以使用包私有可见性直接测试。 case
和catch
可以通过模拟mailSender
进行测试(如果真的有必要Feedback
)。
这就是你可以单元测试的东西。其他一切都是集成测试。如果您使用非常不同的设置制作应用程序以发送具有许多不同配置的电子邮件,那么我会测试它。如果您只使用一个配置和一个公司smtp服务器,并且将来不太可能更改,那么可能不值得设置自动邮件测试