2016-06-28 8 views
0

Пожалуйста, помогите мне написать интеграционный тест для отправки электронной почты, который отправляет по электронной почте.Проверка интеграции электронной почты

public interface MailSenderService { 

void sendEmail(String to, String from, String subject, String body); } 

Почтовый отправителем класс

@Service 
public class MailSenderServiceImpl implements MailSenderService { 
private static final Logger logger = LoggerFactory.getLogger(MailSenderServiceImpl.class); 

@Autowired 
private JavaMailSender javaMailSender; 

@Autowired 
Configuration freemarkerConfiguration; 

private SimpleMailMessage composeMail(String to, String from, String subject, String body) { 
    SimpleMailMessage message = new SimpleMailMessage(); 
    message.setFrom(from); 
    message.setTo(to); 
    message.setSubject(subject); 
    message.setText(body); 
    return message; 
} 

@Override 
public void sendEmail(String to, String from, String subject, String body) { 
    sendMessage(composeMail(to, from, subject, body)); 
} 

@Async 
private void sendMessage(SimpleMailMessage message) { 
    Assert.notNull(javaMailSender, "Email Sender must not be null"); 
    javaMailSender.send(message); 
}} 

И, наконец, вот тест интеграции, который не проходит:

public class MailSenderServiceIT extends BaseServiceIntegrationTest { 

@Autowired 
private MailSenderService mailSenderService; 

@Test 
public void sendEmail() { 
    mailSenderService.sendEmail("[email protected]", "[email protected]", "Test Subject", 
      "Test Body"); 
    flushAndClear(); 
} 

ответ

0

Нам нужно знать, как настроить JavaMailSender. Если вы хотите отправлять электронную почту в своих тестах интеграции, вам нужно настроить JavaMailSender для использования локальной конфигурации. К примеру локального хоста: 5555:

JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); 
javaMailSender.setHost("localhost"); 
javaMailSender.setPort(5555); 

Затем вы можете создать SMTP-сервер с помощью библиотеки subethasmtp непосредственно в тесте. Я personnaly создать Junit правила, чтобы сделать это:

public class SMTPServerRule extends ExternalResource { 

    private Wiser wiser; 
    private String hostname; 
    private int port; 

    public SMTPServerRule() { 
     this(25); 
    } 

    public SMTPServerRule(int port) { 
     this("localhost", port); 
    } 

    public SMTPServerRule(String hostname, int port) { 
     this.hostname = hostname; 
     this.port = port; 
    } 


    @Override 
    protected void before() throws Throwable { 
     super.before(); 

     wiser = new Wiser(port); 
     wiser.setHostname(hostname); 
     wiser.start(); 
    } 

    public List<WiserMessage> getMessages() { 
     return wiser.getMessages(); 
    } 

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

Таким образом, вы можете сделать что-то подобное в интеграционном тесте:

@Rule 
public SMTPServerRule smtpServerRule = new SMTPServerRule("localhost", 5555); 

@Test 
public void sendEmail() { 
    mailSenderService.sendEmail("[email protected]", "[email protected]", "Test Subject", "Test Body"); 
    flushAndClear(); 

    List<WiserMessage> messages smtpServerRule.getMessages(); 
} 
+0

Я использую эти свойства для отправки почты: smtp.host = Smtp .gmail.com smtp.port = 587 [email protected] smtp.password = aaa12345678 $ – Mary

+0

Запуск теста Я получаю исключение MailAuthenticationException – Mary

Смежные вопросы