2016-05-02 12 views
1

自動テストがかなりありますが、1回のテストで次のテストにイベントがこぼれてしまい、テストが失敗することがあります。誰にでもこれが当てはまる可能性があることを明確にするために、私は以前に提示されたエラーメッセージでテスト/テストを述べたいと思います。テスト実行中に前回のテストを実行する可能性があります。

私はこのデザインが最適ではないことを知っていますが、この時点で再設計することは行われません。

テスト実行中に以前実行したテストに関する名前やその他のデータを取得することはできますか?

+0

これは、使用しているユニットテストフレームワークに非常に特有であり、フレームワークが並列テストを実行する場合には、崩壊する可能性があります。 – yaakov

+0

私は強く**あなたが独立したタスクとして各テストを設計することをお勧めします。テスト**は互いに影響してはいけません**。別のテストのデータが必要な場合は、そのコードを別のメソッドで抽象化し、両方のテストからそのコードを呼び出します。各単一のテストはスタンドアロンでなければなりません。ランタイムパフォーマンスを最適化していないが、正確性をテストしていることを忘れないでください。 –

+0

私はテストがお互いに影響してはならないことをよく知っています。私は悲しいことに、私が働いている遺産がどのように設計されているかを決めることはできません。私たちは現時点で100時間を費やす時間がありません。私は、これらのインスタンスが発生するとエラーを見つけるのが少なくとも簡単になるようにしようとしています。 – Joel

答えて

1

あなたは

テストはテストの後

は、テストの貧弱な設計で失敗すること、次のテストにイベントをこぼさます言ったように。それぞれはHermetic patternに従っていて、十分に自信を持ってください。さらに、各テストは、合格と不合格の両方で、初期状態のシステムを元に戻そうとするべきです。このクリーンアップロジックはTearDownメソッド(例えばNUnit)に置くことができます。

一つの簡単な方法

が実行からすべてのデータを格納するための世界的な場所を作成することですテスト実行中に、以前に実行するテストに関する名前やその他のデータを取得

へ例えばログファイル。もし私が(そしてテストが並行して実行されていないと仮定して)それをしなければならなかったら、私はテストの名前をログに記録し、それが次のもので上書きしたり、テストが失敗した場合はTearDownのリンクを使用し、前のテストで失敗した場合は StackのようにLIFOのコレクションを使用してテストします。

+0

別の解決方法は、各テストの最後に実行されるフックを追加することです。 「こぼれた」イベントがある場合は、テストに失敗するか、またはそれらをクリーンアップします。 – yaakov

+0

[TearDown]で各テストの後にイベントをクリーンアップしていますが、それでも十分ではありません。 – Joel

+0

私は、各テストでTestContext.CurrentContext.Test.Nameの結果を格納する静的変数を使用しました。十分にうまくいくと思われる。 – Joel

関連する問題