我密切关注这个网站,将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抛出了它,因为它是空的。我不知道如何解决这个问题,任何帮助都会很好,谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!