我想测试一种使用smtp.gmail.com发送电子邮件的简单方法。发送电子邮件和密码的人在application.properties中设置,并且正在使用@Value注释进行使用。我该如何为这种方法编写Junit测试?
我尝试使用伪造的smtp和绿色邮件。但是我不明白它是如何工作的以及如何实现的。我正在使用gradle。我已经将伪造的smtp包含在build.gradle中,但不知道如何更改电子邮件的发送位置。
这是我的Junit测试课程:
import static org.junit.Assert.*;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import org.junit.Test;
import com.Email.EmailServiceApplication;
public class EmailServiceTest {
@Test
public void test() throws AddressException, MessagingException {
EmailServiceApplication esa = new EmailServiceApplication();
assertEquals(esa.sendEmail("abhi", 1), "Email sent successfully");
}
}
这是我的方法
private void sendmail(EmailMessage emailmessage, int ver) throws AddressException, MessagingException {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
// get session for email
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
if(ver == 1) {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(username, false));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailmessage.getTo_address()));
msg.setSubject("Job uploaded");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("job has been uploaded successfully!");
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
msg.setContent(multipart);
msg.setSentDate(new Date());
// Send
Transport.send(msg);
}
}
答案 0 :(得分:0)
在当前状态下,由于电子邮件提供程序和sendlogic的设置采用相同的方法,因此您的代码难以测试。这样就无法将电子邮件发送到smtp.gmail.com以外的其他位置。
我建议将这两个方面分成一些较小的方法。这使得可以通过例如Greenmail邮件提供商。
类似的东西:
Session createMailSession() {
... your original session creation logic here
return session;
}
void doSendMail(Session session, EmailMessage emailMessage, int ver) {
if(ver == 1) {
... your original sending logic here
}
}
public void sendMail(EmailMessage emailmessage, int ver) {
doSendMail(getSession(), emailMessage, ver);
}
现在,您可以使用其他电子邮件提供商来测试发送逻辑,例如绿色邮件:
@Test
public void canSendMail() {
Session testSession = greenMail.getSmtp().createSession()
doSendMail(testSession, ..., ...)
assertEquals(1, greenMail.getReceivedMessages().length)
}