Testes para o e-mail enviado - Dumbster e greenmail não pegar enviado JavaMail
Pergunta
Eu estou tentando integrar Dumbster para testar nossa JavaMail com base notificador de e-mails enviados.Os e-mails são enviados, mas no meu teste Dumbster não buscá-las.Eu não tenho certeza se eu precisar de configuração adicional para fazer esse trabalho buton o dumbster página inicial ele diz, ele irá ouvir automaticamente para e-mails enviados através de smtp na porta 25.
Este é o nosso java configuração do e-mail:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.somewhere.com" />
<property name="port" value="25" />
<property name="username" value="theUserName" />
<property name="password" value="thePassword" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
A nossa Mailer classe só injeta o JavaMailer:
@Component
public class OurMailer {
@Inject
private MailSender mailSender;
public void sendMail(String from, String to, String subject, String msg) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(msg);
mailSender.send(message);
}
O teste é bastante simples, como demonstram em sua página:
@Inject
private OurMailer ourMailer;
@Test
public void ourMailer_should_send_mail() {
SimpleSmtpServer server = SimpleSmtpServer.start();
ourMailer.sendMail(FROM_EMAIL, TO_EMAIL, SUBJECT, MESSAGE);
server.stop();
Assert.assertTrue(server.getReceivedEmailSize() == 1);
}
Como eu disse, o email é enviado, mas a Asserção de falha.
Qualquer idéias?
BTW:Eu também tentei Greenmail mas com o mesmo resultado:
o maven ligeiramente diferente:
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<version>1.3.1b</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
O teste
GreenMail greenMail = new GreenMail(); //uses test ports by default
greenMail.start();
// send mail
Assert.assertEquals("subject", greenMail.getReceivedMessages()[0].getSubject());
greenMail.stop();
Solução
O teste falhar porque o config diz "Enviar o email para o servidor SMTP smtp.somewhere.com
"mas você quer enviar para o SimpleSmtpServer
que é executado no localhost
A utilização de um Sistema de propriedade para o host
parâmetro da mailSender
feijão e defini-lo para localhost
quando você executa um teste.
O que disse, eu sugiro dividir o teste em dois.O primeiro teste deve apenas certificar-se de que o método é chamado com os parâmetros corretos.De que maneira você vai saber que o código tenta enviar mensagens de correio electrónico no tempo correto;há pouco ponto em testes de autenticação de SMTP, o servidor de correio, o correio de infra-estrutura e a rede em um teste de unidade - todos estes são testados por seus respectivos fabricantes.
Um segundo teste deve testar apenas o método sendMail()
o método.Coloque esse teste em um conjunto de teste que pode ser executado manualmente.O que você quer saber aqui é se você configurar corretamente e usar o MailSender
API.A menos que você altere o código na sendMail()
método, você não precisa executar este teste.
Isto irá acelerar o seu teste de unidade e de se livrar de muitos desnecessários dependências que podem causar falhas no teste, mesmo que seu código funciona corretamente.
Outras dicas
Nota:Parece haver versões mais recentes do Dumbster (não disponível a partir da fonte original), que pode ter corrigido o jeito erros encontrados:
sourceforge.net/p/dumbster/patches/9/
https://github.com/rjo1970/dumbster
git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;a=commit;h=b0f7be4b0666dca22205e6df5c7374677daa416e
E Greenmail parece residir aqui esses dias: