2009-04-30 14 views
4

私は通常、本番環境でのそれの実行をテストする必要がある場合は特に、関係なく、それが何をするか、コードのどの部分を言うために一人です。 しかし、動的電子メールコンテンツが例外であるべきかどうか、私は不思議に思っていました。それは頻繁に変化し、それが価値があるかどうかわからないということを適切かつ完全にテストするのは痛みです。多くの場合、単体テストの内容はコピー&ペーストされます(これは理想的ではありませんが、それにもかかわらず起こります)ので、何かが激しく爆発するかどうかを私たちに伝える以外に本当に効果がありません。電子メールを送信しようとしている単純な単体テスト(コピーを検証していない)は、それを処理する必要があります。ユニットテストの電子メールコンテンツ

私は他の開発者からいくつかの意見を得るために期待していました。どう考えているか教えてください。単体テスト電子メールの内容かどうか?

編集: 実際に電子メールを送信するための単位/統合テストは既に別途用意されていますが、この質問は電子メールの内容をテストすることを指しています。現在、私たちは単体テストの動的コンテンツだけをテストしていますが、テンプレートテキストはクリックテスト以外のものではありません。

答えて

5

常にすべてをテストする必要がありますが、常にユニットすべてをテストする必要はありません。この場合、電子メールテンプレートが正しく生成されたことを検証しようとすると、おそらく統合とユーザー受け入れテストがうまくいくでしょう。

あなたはユニットテストは、あなたのプログラムは、しかし、電子メールテンプレートを構築することができますどのように、これは私はあなたが行くお勧めルートです。メソッドがインターフェイスまたは仮想で定義されている(および静的ではありません)されているとして、あなたはモックできる限り

// using C# syntax returning strings for the example -- you could just as easily return 
// System.Net.Mail.MailMessage or javax.mail.Message instead 
string BuildPasswordChangeTemplate(string username, string newPassword, string email); 
string BuildErrorTeplate(string methodName, string serviceName, Exception e); 

メールテンプレート、などのメソッドを持つヘルパークラスを埋めるためのAPIを構築ヘルパークラスと単体テストは、適切な時間に適切なテンプレートビルダーにコードを呼び出します。その後、スペルや書式などをユーザーの受け入れテストに押し付けて、作業を完了したものと見なすことができます。

3

テンプレート(または他のダイナミックソース)からの電子メールにコンテンツを配置できることを確認する単体テストを追加します。その内容は、「これは## USERNAME ##へのテスト電子メール」などのような、この単体テスト固有のものです。テンプレートが変更された場合は、新しいテンプレート情報でユニットテストを更新しません。

0

私の基本的なルールはこれです:それはアプリケーションの機能に影響を与える場合、それをテスト。 (はい、かなりゆるく定義されたルールです)。

このように、サイトが送信する電子メールの多くは、ユーザーのアクティベーションのようなものです。このような場合、電子メールそのものの内容(機能ではなくコンテンツ)をテストしませんが、となり、正しいアクティベーションURLを送信しています。

ハードコードされた文字列メッセージではないデータから、コードによって生成されたダイナミック電子メールコンテンツに拡張します。

0

それはあなたが提案したのと同様の試験システムに来るとき、私の見解は、あなたが完全なシステムではなく、コードの論理ブロックをテストしているということです。私はシステム内の小さなコードユニットと接続された部品の一部をテストするユニットテストを書いて、ユーザーとの機能テストを使って完全なシステムをテストします。

2

私はあなたがここでテストしたい二つの異なるものを参照してください。生成された電子メールコンテンツをテストすることは一つであり、コードをリファクタリングして、その部分だけを単体テストできるようにする必要があります。電子メールの生成のみを処理する関数またはクラスを記述し、関心のあるさまざまな入力に対してユニットテストを書くことができます。

電子メールの内容がコードの一部である場合、あなたはそれのまわりでいくつかの種類のテストをする必要があります。しかし、メールの内容が「おめでとう{名}」、「あなたはナイジェリアの宝くじに当選しました...」と完全に一致しているかどうかを確認するよりも、より健全性のチェックが必要なのかもしれません。おそらく、コンテンツが特定のサイズのしきい値を超えていること、および受信者の名前(または動的コンテンツが挿入されたもの)が本文のどこかに含まれているかどうかを確認するだけです。

もう1つはメール送信機をテストすることです。厳密に単体テストではありません。私はそのことを機能的テストか統合テストと考えています。このタイプの大規模テストをすでに処理しているQAチームまたはプロセスがある場合は、おそらくこれを安全に打ち消すことができます。そうでない場合は、受信メールを受け取り、それを機能テストスイートの一部として実行するための小さなスタブSMTPサーバーを作成するのは難しくありません。 SMTPは非常にシンプルなプロトコルです。メールメッセージを受け入れるために半ダース程度のコマンドを実装するだけで済みます。私は約1日でRubyを使っていました。 SMTPホストとポートを再構成して、テスト用とプロダクション用に設定できるようにする必要があります。

0

ユニットテストでは、すべてのマージコードが有限集合であるか、マージメカニズムが動的であればマージコードが機能することを保証します。テンプレートテキストによってマージされたドキュメントに適用されるテストと同様に、意味があります。

各テンプレートのテスト後に実際に値を追加してはいけませんが、一連の作業が追加されます。

関連する問題