java - 如何测试JavaMailSender?

标签 java email spring-boot junit

我没有什么问题。我创建了 MailService 来发送邮件。当我运行程序时,它起作用了。我在 resources/application.properties 中拥有的电子邮件的所有属性。我正在使用 spring-boot-starter-mail

@Service
public class MailService {
    private JavaMailSender javaMailSender;

    @Autowired
    public MailService(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    public void sendMail(String subject, String messageContent, String recipient)
            throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
        messageHelper.setTo(recipient);
        messageHelper.setSubject(subject);
        messageHelper.setText(messageContent);
        javaMailSender.send(mimeMessage);
    }
}

但我不知道如何为它创建测试。我试过这样的事情,我使用 org.jvnet.mock-javamail:mock-javamail,但它不起作用:

public class MailServiceTest {
    private MailService mailService;

    @Mock
    private JavaMailSender javaMailSender;


    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mailService = new MailService(javaMailSender);
        Mailbox.clearAll();
    }

    @Test
    public void sendMailTest() throws MessagingException, IOException {
        String subject = "Some subject";
        String body = "Some contents.";
        String recipient = "test@test.com";

        mailService.sendMail(subject, body, recipient);
        List<Message> inbox = Mailbox.get(recipient);
        assertTrue(inbox.size() == 1);
        assertEquals(subject, inbox.get(0).getSubject());
        assertEquals(body, inbox.get(0).getContent());
    }
}

最佳答案

您可以测试 MimeMessage 是如何形成的:

public class EmailServiceTest {

    private EmailServiceImpl emailServiceImpl;

    private JavaMailSender javaMailSender;

    private MimeMessage mimeMessage;

    @Before
    public void before() {
        mimeMessage = new MimeMessage((Session)null);
        javaMailSender = mock(JavaMailSender.class);
        when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage);
        emailServiceImpl = new EmailService(javaMailSender);
    }

    @Test
    public void emailTest() {
        String recipient = "example@example.com"
        EmailRequest request = new EmailRequest();
        request.setRecipient(recipient);
        emailServiceImpl.send(request);
        assertEquals(recipient, mimeMessage.getRecipients(RecipientType.TO)[0].toString());
    }
}

关于java - 如何测试JavaMailSender?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43387986/

相关文章:

java - maven pom 到 gradle - 程序集插件失败

java - 有一个静态方法在枚举中使用非静态成员

php - fwrite() : SSL operation failed with code 1. OpenSSL 错误消息:错误:1420C0CF:SSL 例程:ssl_write_internal:协议(protocol)已关闭

java - Spring中的ImportSelector和ImportBeanDefinitionRegistar有什么区别?

java - 带长轮询的 Spring REST

java - 为什么我们要在类中声明接口(interface)?

java - 如何在 Tomcat 上运行的 Spring REST 应用程序中查找未使用的端点?

c# - 检索电子邮件的 AlternateView

email - 如何使用 Mailchimp 或 Mandrill 从电子邮件标题中删除 *|MC_PREVIEW_TEXT|*

spring-boot - Service类中的Redis缓存似乎不起作用