この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

メール送信を簡単に単体テストする


ちかごろ、僕が関与する案件では、アプリからJavaMailでメール送信することが多いです。


で、コードを書くのは簡単なのですが、単体テストが大変という。
JavaMailって何気にクセが強いので、実際にSMTPで送ってみないと
コードがうまくできてるかどうか、分からないというケースが多い。


でも高々単体テストで、SMTPサーバを用意するのは超面倒。
JUnitをサクっと実行できるようにしたいじゃないですか。


そんなあなたにDumbster
組み込みで動作する、単体テスト専用に設計されたSMTPサーバです。
使うのは簡単で、次のようにするだけ。

public class SimpleSmtpServerTest extends TestCase {
...
  public void testSend() {
    SimpleSmtpServer server = SimpleSmtpServer.start();

    try {
      // Submits an email using javamail to the email server listening on port 25 
      // (method not shown here). Replace this with a call to your app logic.
      sendMessage(25, "sender@here.com", "Test", "Test Body", "receiver@there.com");
    } catch(Exception e) {
      e.printStackTrace();
      fail("Unexpected exception: "+e);
    }

    server.stop();

    assertTrue(server.getReceivedEmailSize() == 1);
    Iterator emailIter = server.getReceivedEmail();
    SmtpMessage email = (SmtpMessage)emailIter.next();
    assertTrue(email.getHeaderValue("Subject").equals("Test"));
    assertTrue(email.getBody().equals("Test Body"));	
  }
...  
}

(公式サイトから引用)



こりゃ超便利。スバラシイ!!

と思ったら…

なんか、メールアプリのテスト用フレームワークって意外とあるみたいですね。


http://code.google.com/p/subethasmtp/


例えばここで紹介されているWiserとかが、そう。


Dumbsterはコードベースが古い(最終更新は2006年)ので、
Genericsなどには当然対応してません。


しかしGenericsなど、JDK5以降の便利機能に首までドップリ浸かった身としては、今更

for (Iterator iter = ...; iter.hasNext(); ) {
    Object o = iter.next();

    ...
}

なんてカッタルイCodeを書く気がしない。


だから紹介しておいてアレだけど、Wiserに乗り換えます(笑)たぶん。



4/6追記

Wiser試しました。明らかにコッチのほうが使い易いです。
Dumbsterサヨウナラ。今までありがとう。(一回しか使ってないけど)


ちなみに


Dumpsterとはこれのこと。




ふーん、アメリカ映画ではおなじみのコレ、ダンプスターっていうんですね。知らんかった。