gpt4 book ai didi

java - 使用 SMTP 为 SendMail 函数编写单元测试

转载 作者:行者123 更新时间:2023-12-02 02:54:14 24 4
gpt4 key购买 nike

我想在我的代码中测试 SendMail 功能。如何模拟 session 、属性、MimeMessage ?

我正在使用 SMTP 发送邮件。

 JsonObject sendMail()
{
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
});
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("xyz");
message.setText("sjs");
Transport.send(message);
}catch (Exception e)
{
String response = new String("{\"status\":\"failed\"}");
return response;
}
String response = new String("{\"status\":\"sent successfully\"}");
return response;
}

最佳答案

答案并不那么简单,因为您使用 Session 和 Transport 类的静态方法。通过使用静态方法,不可能注入(inject)不同的模拟对象,因为模拟需要一个实例。

当然有一个解决方案,但这实际上是最后的手段:使用PowerMock(ito)。它使您能够模拟静态方法。但 PowerMock 存在一些问题:它不支持 JUnit5,不支持 Java 11,并且测试不是由 SonarQube 测量的。另外:您需要 PowerMock 的事实实际上告诉您需要重写代码,以便它可以测试。

可测试代码使用依赖注入(inject)框架(例如 Spring)在类中动态插入正确的对象。此功能的最酷之处在于您可以在测试类时注入(inject) Mock 对象。

关于java - 使用 SMTP 为 SendMail 函数编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57087576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com