我想为给定方法编写测试用例。但是存在一个静态的Transport.sendEmail方法。
如何使用MockitoJunitRunner模拟此方法。
public void sendEmail(final String message, final String contentType) {
final Session session = Session.getDefaultInstance(PROPERTIES, null);
final Multipart mpart = new MimeMultipart();
final MimeBodyPart body = new MimeBodyPart();
try {
body.setContent(message, contentType);
mpart.addBodyPart(body);
Transport.send(createMessage(session, mpart));
LOGGER.info("Email Notification Sent Successfully");
} catch (MessagingException | UnsupportedEncodingException e) {
LOGGER.error("Was not able to send mail", e);
}
答案 0 :(得分:1)
所以:
Transport.send(createMessage(session, mpart));
static
调用的意思是:您无法使用Mockito“控制”它。干净利落。如果该调用在您的单元测试环境中只是“通过”,那么您可以对其进行测试,但不能验证该调用是否确实发生。更糟糕的是,如果该调用在单元测试设置中引发一些异常,那么该怎么办?
选项:
最后一个想法有多种口味:
EmailSenderService
方法的最小接口void send(Message whatever)
。下一步:创建该接口的一个实现,该实现仅调用该静态方法。现在,您实际上必须发送该消息的代码...只需在EmailSenderService
的实例中传递即可。在单元测试中,您现在可以@模拟该接口,并且可以控制它。