首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何测试Spring的JavaMailSender

如何测试Spring的JavaMailSender
EN

Stack Overflow用户
提问于 2013-05-31 18:18:11
回答 4查看 19.7K关注 0票数 16

我有一个注入了JavaMailSender的服务。我的服务对其进行配置并发送一封邮件。我想截取原始邮件以确保信息是正确的。我想在JUnit中这样做。

你们会怎么做呢?

代码语言:javascript
运行
复制
@Service
public class MyServiceImpl {

    @Autowired
    private JavaMailSender _mailSender;

    public void sendMail(String to, String body, String subject){
        ...
        _mailSender.something
        ...
    }
}
EN

Stack Overflow用户

发布于 2021-10-26 16:17:39

为了给这个问题添加一个更新的答案,并且2012年的链接博客文章似乎偶尔会关闭,这里有一个完整的示例,使用GreenMail编写与JUnit 5的集成测试(假设您正在为JavaMailSender使用Spring Boot的自动配置)。

首先,确保覆盖邮件服务器的凭据和位置。为此,您可以在src/test/resources中添加一个application.yml文件:

代码语言:javascript
运行
复制
spring:
  mail:
    password: springboot
    username: duke
    host: 127.0.0.1
    port: 3025 # default protocol port + 3000 as offset
    protocol: smtp
    test-connection: true

接下来,Spring Boot的自动配置将为您的测试配置连接到GreenMail的JavaMailSender。您可以使用GreenMail的JUnit Jupiter扩展来方便地启动/停止GreenMail服务器以进行测试:

代码语言:javascript
运行
复制
<dependency>
  <groupId>com.icegreen</groupId>
  <artifactId>greenmail-junit5</artifactId>
  <version>1.6.1</version>
  <scope>test</scope>
</dependency>

..。生成以下示例测试:

代码语言:javascript
运行
复制
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class JavaMailSenderIT {

  @RegisterExtension
  static GreenMailExtension greenMail = new GreenMailExtension(ServerSetupTest.SMTP)
    .withConfiguration(GreenMailConfiguration.aConfig().withUser("duke", "springboot"))
    .withPerMethodLifecycle(false);

  @Autowired
  private JavaMailSender javaMailSender;

  @Test
  void shouldUseGreenMail() throws Exception {

    SimpleMailMessage mail = new SimpleMailMessage();
    mail.setFrom("admin@spring.io");
    mail.setSubject("A new message for you");
    mail.setText("Hello GreenMail!");
    mail.setTo("test@greenmail.io");


    javaMailSender.send(mail);

    // awaitility
    await().atMost(2, SECONDS).untilAsserted(() -> {
      MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
      assertEquals(1, receivedMessages.length);

      MimeMessage receivedMessage = receivedMessages[0];
      assertEquals("Hello GreenMail!", GreenMailUtil.getBody(receivedMessage));
      assertEquals(1, receivedMessage.getAllRecipients().length);
      assertEquals("test@greenmail.io", receivedMessage.getAllRecipients()[0].toString());
    });
  }
}

您也可以使用use Testcontainers to start a local GreenMail container作为本地沙箱电子邮件服务器。

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16854993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档