模拟 MIMEMessage 的正确方法?

我想实际验证消息中设置的字段,如正文、主题、发件人等......我也尝试过做一个参数捕获器,但它不起作用,当我调试代码时,消息总是显示为空获取 javaMailSender.send(message) 行时的字段。


是否有模拟 MIMEMessage 的最佳实践?


//EmailService.java


import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;


import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;


@Slf4j

public class EmailService {

    private JavaMailSender javaMailSender;


    @Autowired

    public EmailService(JavaMailSender javaMailSender) {

        this.javaMailSender = javaMailSender;

    }



    public void sendEmail() {

        MimeMessage message = javaMailSender.createMimeMessage();

        String body = "<html>\n" +

            "<p> This the body </p>\n" +

            "<br>\n";

        try {

            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true);

            mimeMessageHelper.setSubject("subject");

            mimeMessageHelper.setTo("stack@overflow.com");

            mimeMessageHelper.setFrom("overflow@stack.com");

            mimeMessageHelper.setText(body, true);


            javaMailSender.send(message);


        } catch (MessagingException e) {

            log.error("error");

        }`enter code here`

    }

}


阿晨1998
浏览 193回答 1
1回答

肥皂起泡泡

使用集成测试进行这种测试通常更容易。电子邮件通常是使用诸如 freemarker 之类的模板库构建的,因此集成测试对于验证您的模板是否正确也很有价值。您可以通过使用PowerMock创建一个 mock来进行单元测试MimeMessageHelper,但是 PowerMock 有时在跟上其他测试库的变化方面可能会很慢,而且这样的测试通常会变得脆弱且价值不大。例如,您可以验证setSubject()被调用mimeMessageHelper,但这是否会产生您真正想要测试的结果(主题设置为message)?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java