web-dev-qa-db-ja.com

実際にメールを送信せずにJunitメールテストを実行する

通常、問題が発生したことを確認するメールを送信するいくつかのモデルクラスでユニットテスト(Junit)を実行したいと思います。実際のメールを送信せずに実行でメールを送信しようとしたことを確認できる単体テストで使用できる模擬メールサーバーはありますか?

これはいいことだと思いますが、自分で書きたいと思うかどうかはわかりません。電子メールの側面のアプリスタックはVelocity + Springであるため、applicationContext.xmlファイルを変更するだけでテストサーバーを指定できるようにするのが望ましいでしょう。

34
stevedbrown

別の答え: Dumbster は、テスト用に設計された偽のSMTPサーバーです。それはJavaで書かれています。

29
Colin Pickard

Mock JavaMail プロジェクトはあなたが望むものだと思います。

16
Jacob Mattison

多くの機能と優れた例を備えた、生きている(どうやらDumbsterは死んでいる)GreenMailを調べます。

http://www.icegreen.com/greenmail/

13
Iker Aguayo

私はあなたがJavamailを使っていると思います、そして問題はjavax.mail.Sessionは最終版であるため、あざけることはできません。

他の人が、独自の「メールセッション」インターフェースを定義して、Javamailを使用する実装を作成することを提案しているようです。テストではモックを挿入するだけで、「リアルワールドモード」ではJavamail実装を注入します。

JMockとEasyMockはどちらも、送信するメッセージに対して行う可能性のあるすべてのアサーションをサポートし、テストが完了します。

余談ですが、私は通常、ユニットテスト内からのプロセス外の呼び出しを回避しようとします-テストスイートを頻繁に実行していると、通常は実行が少なくなり、コードベースの問題が発生し始めると、あなたを殺します。

3
Nick Holt

あなたはJavaMail Mock2を試すことができます https://github.com/salyh/javamail-mock2

主にIMAP/POP3に焦点を当てていますが、SMTP Mockも利用できます。 Maven Centralで利用できます。

特徴

  • Imap、imaps、pop3、pop3s、smtp、smtpsをサポート
  • POP3のサポート:POP3Folder、Folder.getUID(Message msg)へのキャスト
  • IMAPのサポート:IMAPFolderへのキャスト、UIDFolder、サブフォルダーへのキャスト、-Folder.getMessagesByUID(...)、フォルダーの削除/名前変更、メッセージの追加
  • SMTPのサポート:Mock Transport.send()
  • 現時点ではサポートされていません:IDLE、CONDSTOREなどのIMAP拡張機能とPOP3Message/IMAPMessageへのキャスト、ストアリスナー
1
salyh

Phil Haackは ユニットテストの電子メール送信に関するブログ投稿 を持っており、彼はフリーウェアのメールサーバーを中心にコーディングしました。

0
Colin Pickard

私の解決策は、すべての構成オプションを受け取り、send()メソッドを持つクラスでメールサーバーをラップすることでした。テストでは、このクラスをモックし、send()をアサートの現在のパラメーターを保存するものでオーバーライドします。

メールサービス自体が動作することをテストするには、ローカルにメールを送信します。 Windowsを使用している場合は hMail を試してください。

0
Aaron Digulla