ちかごろ、僕が関与する案件では、アプリから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サヨウナラ。今までありがとう。(一回しか使ってないけど)