Тест Junit для почтового сервиса - PullRequest
1 голос
/ 14 июня 2019

Я хочу протестировать простой метод отправки электронной почты с помощью 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);
    }
}

1 Ответ

0 голосов
/ 14 июня 2019

в своем текущем состоянии ваш код сложно проверить, так как настройки поставщика электронной почты и 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)
}
...