为什么电子邮件类的greenmail变量为空junit test?

vvppvyoh  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(238)

我密切关注这个网站,将greenmail与我的电子邮件发送者类junit测试集成在一起:https://memorynotfound.com/spring-mail-integration-testing-junit-greenmail-example/
我的项目设置如下:

email-project
  src/main/java
  --com.project.email.util
    --emailSender.java

  src/main/resources
  --application.properties
  --application.yml

  src/test/java
  --com.project.email.util
    --emailSenderTest.java
    --SmtpServerRule.java

我的电子邮件课程是:

public class emailSender implements EnvironmentAware {

    @Autowired
    private Environment env;

    private JavaMailSenderImpl javaMailSender;

    @Bean
    public JavaMailSenderImpl emailSender() {
        javaMailSender = new JavaMailSenderImpl();
        Properties props = new Properties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.sender.protocol", "smtp");
        props.put("mail.smtp.port", "25");
        javaMailSender.setJavaMailProperties(props);
        javaMailSender.setHost(env.getProperty("email_host"));
        String emailUsername = env.getProperty("email_user");
        String emailPw = env.getProperty("password");
        javaMailSender.setUsername(emailUsername);
        javaMailSender.setPassword(emailPw);
        return javaMailSender;
    }

    public void sendEmail(SimpleMailMessage msg) throws Exception {

        if (javaMailSender == null) {
            logger.error("ERROR! Email functionality is unavailable.");
            return;
        }
        javaMailSender.send(msg);

    }
}

这是smtpserverrule,如网站中所示:

import org.junit.rules.ExternalResource;
import com.icegreen.greenmail.util.GreenMail;
import com.icegreen.greenmail.util.ServerSetup;
import javax.mail.internet.MimeMessage;

public class SmtpServerRule extends ExternalResource {
    private GreenMail smtpServer;
    private int port;

    public SmtpServerRule(int port) {
        this.port = port;
    }

    @Override
    protected void before() throws Throwable {
        super.before();
        smtpServer = new GreenMail(new ServerSetup(port, null, "smtp"));
        smtpServer.start();
    }

    public MimeMessage[] getMessages() {
        return smtpServer.getReceivedMessages();
    }

    @Override
    protected void after() {
        super.after();
        smtpServer.stop();
    }
}

这是我的emailsendertest类:

@SpringBootTest
@ActiveProfiles("test")
@ContextConfiguration(classes = {emailSender.class})
@RunWith(SpringRunner.class)
class emailSenderTest {

    @Autowired
    private emailSender emailSender;

    @Rule
    public SmtpServerRule smtpServerRule = new SmtpServerRule(2525);

    @Before
    public void setup() {
        System.setProperty("myEnv", "TEST");
    }

    @Test
    public void sendEmailTest() throws Exception {
        SimpleMailMessage msg = new SimpleMailMessage();
        msg.setTo("nobody@optum.com");
        msg.setCc("nobody@optum.com");
        msg.setText("Test");
        msg.setFrom("andy.wang@optum.com");
        emailSender.sendEmail(msg);
        MimeMessage[] receivedMessages = smtpServerRule.getMessages();
        assertEquals(1, receivedMessages.length);
    }
}

当我运行这个junit测试时,为什么它显示 MimeMessage[] receivedMessages = smtpServerRule.getMessages(); 是否抛出空值?当我进一步研究它时,smtpserverrule类中的局部变量 private GreenMail smtpServer; ,所以它甚至不能使用 smtp.getReceivedMessages() . 我不确定我是否做错了什么,但我完全遵循了它,我认为是greenmail变量smtpserver抛出了它,因为它是空的。我不知道如何解决这个问题,任何帮助都会很好,谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题