0

Dumbsterを統合して、送信メールの JavaMail ベースの通知機能をテストしようとしています。電子メールは送信されますが、私のテストでは Dumbster は受信しません。これを機能させるために追加の構成が必要かどうかはわかりませんが、ダムスターのホームページには、ポート 25 の smtp 経由で送信されたメールを自動的にリッスンすると書かれています。

これは私たちの 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>

Mailer クラスは、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);
    }

彼らのページに示されているように、テストは非常に簡単です。

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

私が言ったように、メールは送信されますが、Assert は失敗します。

何か案は?

ところで:Greenmailも試しましたが、同じ結果になりました:

Maven はわずかに異なります:

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

テスト

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

2 に答える 2

3

設定で「SMTPサーバーにメールを送信する」と表示されているが、で実行されているにメールを送信smtp.somewhere.comしたいため、テストは失敗します。SimpleSmtpServerlocalhost

BeanのhostパラメータにSystemプロパティを使用し、テストを実行するときに設定します。mailSenderlocalhost

そうは言っても、テストを2つに分割することをお勧めします。最初のテストでは、メソッドが正しいパラメーターで呼び出されていることを確認する必要があります。そうすれば、コードが正しい時間にメールを送信しようとしていることがわかります。単体テストでSMTP認証、メールサーバー、メールインフラストラクチャ、ネットワークをテストする意味はほとんどありません。これらはすべて、それぞれのメーカーによってテストされています。

2番目のテストでは、メソッドメソッドのみをテストする必要がありsendMail()ます。そのテストを、手動で実行できるテストスイートに入れます。ここで知りたいのは、MailSenderAPIを正しく設定して使用しているかどうかです。メソッドのコードを変更しない限り、sendMail()このテストを実行する必要はまったくありません。

これにより、単体テストが高速化され、コードが正しく機能していてもテストが失敗する可能性のある多くの不要な依存関係が取り除かれます。

于 2012-10-02T07:33:34.337 に答える
0

注: Dumbster の新しいバージョン (元のソースからは入手できません) があるようで、発生したハング エラーが修正されている可能性があります。

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

そして、Greenmail は最近ここに常駐しているようです:

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

于 2016-07-27T00:25:21.680 に答える