Frage

Ich versuche mich zu integrieren Dummkopf um unseren JavaMail-basierten Notifier für ausgehende E-Mails zu testen.Die E-Mails werden gesendet, aber in meinem Test nimmt Dumbster sie nicht auf.Ich bin mir nicht sicher, ob ich eine zusätzliche Konfiguration benötige, damit dies funktioniert, aber auf der Dumbster-Homepage heißt es, dass automatisch auf E-Mails gewartet wird, die über SMTP an Port 25 gesendet werden.

Dies ist unser Java-Mail-Setup:

<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>

Unsere Mailer-Klasse injiziert nur den 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);
    }

Der Test ist ziemlich einfach, wie sie auf ihrer Seite zeigen:

@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);
}

Wie gesagt, die Mail wird gesendet, aber die Bestätigung schlägt fehl.

Irgendwelche Ideen?

ÜBRIGENS:Ich habe auch Greenmail ausprobiert, aber mit dem gleichen Ergebnis:

maven etwas anders:

    <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>

Test

    GreenMail greenMail = new GreenMail(); //uses test ports by default
    greenMail.start();
    // send mail
    Assert.assertEquals("subject", greenMail.getReceivedMessages()[0].getSubject());
    greenMail.stop();
War es hilfreich?

Lösung

Der Test schlägt fehl, weil in der Konfiguration "Senden Sie die E-Mail an den SMTP-Server" angezeigt wird smtp.somewhere.com" aber du willst es an die schicken SimpleSmtpServer welches läuft auf localhost

Verwenden Sie eine Systemeigenschaft für die host parameter des mailSender bohne und setze es auf localhost wenn Sie einen Test ausführen.

Das heißt, ich schlage vor, den Test in zwei Teile zu teilen.Der erste Test sollte nur sicherstellen, dass die Methode mit den richtigen Parametern aufgerufen wird.Auf diese Weise wissen Sie, dass der Code versucht, E-Mails zum richtigen Zeitpunkt zu senden;es macht wenig Sinn, die SMTP-Authentifizierung, Ihren Mailserver, die Mail-Infrastruktur und das Netzwerk in einem Komponententest zu testen - all dies wird von den jeweiligen Herstellern getestet.

Ein zweiter Test sollte nur die Methode testen sendMail() Methode.Fügen Sie diesen Test in eine Testsuite ein, die manuell ausgeführt werden kann.Was Sie hier wissen möchten, ist, ob Sie das richtig eingerichtet und verwendet haben MailSender API.Es sei denn, Sie ändern den Code in der sendMail() methode, Sie müssen diesen Test überhaupt nicht ausführen.

Dies beschleunigt Ihren Komponententest und beseitigt viele unnötige Abhängigkeiten, die dazu führen können, dass der Test fehlschlägt, obwohl Ihr Code ordnungsgemäß funktioniert.

Andere Tipps

Hinweis: Es scheint neuere Versionen von dumbster (nicht verfügbar von der ursprünglichen Quelle verfügbar), die möglicherweise die Hangfehler behoben haben, die Sie aufgeteilt haben:

sourceforge.net/p/dumumster/patches/9 /

https://github.com/rjo1970/dumbster

git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;a=commit;h=B0F7BE4B0666DCA22205E6DF5C7374677DAA416E

und GreenMail scheint in diesen Tagen hier zu sein:

https://github.com/greenmail-mail-test/greenmail

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top