Test des e-mails envoyés - Dumbster et greenmail ne captent pas le JavaMail envoyé
Question
j'essaie d'intégrer Bête pour tester notre notificateur basé sur JavaMail pour les e-mails sortants.Les e-mails sont envoyés mais lors de mon test, Dumbster ne les récupère pas.Je ne sais pas si j'ai besoin d'une configuration supplémentaire pour que cela fonctionne, mais sur la page d'accueil stupide, il est indiqué qu'il écoutera automatiquement le courrier envoyé via SMTP sur le port 25.
Voici notre configuration de messagerie Java :
<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>
Notre classe Mailer injecte simplement le 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);
}
Le test est assez simple comme ils le démontrent sur leur page :
@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);
}
Comme je l'ai dit, le courrier est envoyé mais l'Assert échoue.
Des idées?
D'AILLEURS:J'ai aussi essayé Greenmail mais avec le même résultat :
maven légèrement différent :
<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>
Le test
GreenMail greenMail = new GreenMail(); //uses test ports by default
greenMail.start();
// send mail
Assert.assertEquals("subject", greenMail.getReceivedMessages()[0].getSubject());
greenMail.stop();
La solution
Le test échoue car la configuration indique "Envoyer le courrier au serveur SMTP smtp.somewhere.com
" mais vous voulez l'envoyer au SimpleSmtpServer
qui tourne sur localhost
Utilisez une propriété système pour le host
paramètre du mailSender
haricot et réglez-le sur localhost
lorsque vous exécutez un test.
Cela dit, je suggère de diviser le test en deux.Le premier test doit simplement s'assurer que la méthode est appelée avec les paramètres corrects.De cette façon, vous saurez que le code essaie d’envoyer les mails au bon moment ;il ne sert à rien de tester l'authentification SMTP, votre serveur de messagerie, l'infrastructure de messagerie et le réseau dans un test unitaire - tous ces éléments sont testés par leurs fabricants respectifs.
Un deuxième test devrait tester uniquement la méthode sendMail()
méthode.Mettez ce test dans une suite de tests qui peut être exécutée manuellement.Ce que vous voulez savoir ici, c'est si vous configurez et utilisez correctement le MailSender
API.Sauf si vous changez le code dans le sendMail()
méthode, vous n’êtes pas du tout obligé d’exécuter ce test.
Cela accélérera votre test unitaire et éliminera de nombreuses dépendances inutiles qui peuvent entraîner l'échec du test même si votre code fonctionne correctement.
Autres conseils
Remarque: il semble y avoir de nouvelles versions de Dumbster (non disponibles à partir de la source d'origine) pouvant avoir corrigé les erreurs de suspension que vous avez rencontrées:
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=b0f7be4b0666DC7374677DAA416E
et Greenmail semble résider ici de nos jours: