通常、問題が発生したことを確認するメールを送信するいくつかのモデルクラスでユニットテスト(Junit)を実行したいと思います。実際のメールを送信せずに実行でメールを送信しようとしたことを確認できる単体テストで使用できる模擬メールサーバーはありますか?
これはいいことだと思いますが、自分で書きたいと思うかどうかはわかりません。電子メールの側面のアプリスタックはVelocity + Springであるため、applicationContext.xmlファイルを変更するだけでテストサーバーを指定できるようにするのが望ましいでしょう。
別の答え: Dumbster は、テスト用に設計された偽のSMTPサーバーです。それはJavaで書かれています。
Mock JavaMail プロジェクトはあなたが望むものだと思います。
多くの機能と優れた例を備えた、生きている(どうやらDumbsterは死んでいる)GreenMailを調べます。
私はあなたがJavamailを使っていると思います、そして問題はjavax.mail.Session
は最終版であるため、あざけることはできません。
他の人が、独自の「メールセッション」インターフェースを定義して、Javamailを使用する実装を作成することを提案しているようです。テストではモックを挿入するだけで、「リアルワールドモード」ではJavamail実装を注入します。
JMockとEasyMockはどちらも、送信するメッセージに対して行う可能性のあるすべてのアサーションをサポートし、テストが完了します。
余談ですが、私は通常、ユニットテスト内からのプロセス外の呼び出しを回避しようとします-テストスイートを頻繁に実行していると、通常は実行が少なくなり、コードベースの問題が発生し始めると、あなたを殺します。
あなたはJavaMail Mock2を試すことができます https://github.com/salyh/javamail-mock2
主にIMAP/POP3に焦点を当てていますが、SMTP Mockも利用できます。 Maven Centralで利用できます。
特徴
Phil Haackは ユニットテストの電子メール送信に関するブログ投稿 を持っており、彼はフリーウェアのメールサーバーを中心にコーディングしました。
私の解決策は、すべての構成オプションを受け取り、send()
メソッドを持つクラスでメールサーバーをラップすることでした。テストでは、このクラスをモックし、send()
をアサートの現在のパラメーターを保存するものでオーバーライドします。
メールサービス自体が動作することをテストするには、ローカルにメールを送信します。 Windowsを使用している場合は hMail を試してください。