2016-07-20 3 views
0

私は[SetUp]を使用することが明らかですが、結果を取得するコードが例外をスローする可能性が非常にあり、テストしたいと考えています。Nユニットテストの結果を別のテストで再利用する方法はありますか?

免責事項前部まで、私達は「本当の」単体テストを行っていません。私たちが作っていることは、統合テスト、設計が完了したこと、ユニットテストを前に進めなかったこと、現時点でのリソースを持っていないことなどが挙げられますが、機能のチャンク。

このようなチャンクの1つは、外部データベースからデータを集約し、さまざまな参照を持つ4つの複雑なオブジェクトを作成して内部データベースの複数のテーブルに格納する関数です。我々はすでに、主集約関数をリファクタリングして、(集約関数が挿入を行う前に)ラッパークラスのオブジェクトを返すようにしました。呼び出し元が挿入するようになりました。これにより、データをデータベースから引き出すことなく自動的にデータを検証するための自動テストを作成できます。

NUnitでは、この集約関数をテストしたいという問題があります。それ以上は細かくすることはできません。しかし、4つのオブジェクトのそれぞれを個別に検証し、その関数が例外をスローしないことを検証する必要があります。

この関数は小さなセットでも実行するにはしばらく時間がかかりますので、同じオブジェクトを4回別々に再実行しないようにして、各オブジェクトをテストします。

理想的には、関数がエラーなしで完了したことを検証するテストを実行したいと思います。>フィードは、1つの複合オブジェクト - >複合オブジェクト - >などの検証になります。これはNUnitで可能でしょうか、あるいは私たちが使うことができるもう一つのパラダイムがありますか?

私は最悪の場合、同じデータセットでアグリゲーションを4回実行するとします。

+0

セットアップを使用する際の問題点は何ですか?セットアップに例外がある場合、テストは実行されず、例外はXYZの例外のためにセットアップが失敗したことを通知します。オブジェクトの作成に費用がかかった場合は、他のテスト用にフィールドにキャッシュします。 –

+0

私は既にそれをNユニットですばやく再生していますが、私の理解は[セットアップ]を "テスト"すべきではないということでした。 – SmashCode

+1

テストクラスにクラスレベルの変数を作成し、値を保持します。免責事項として、これによりテストは実行される順序に依存します。通常のテストシナリオでは、単体テストは単独で実行するテスト以外のものに依存しないようにするのが悪い考えです。私の場合は、私は変数をnullableにするので、以前のテストが実際に実行されたかどうかを簡単にテストして、Assertをスローすることができます。 – Kevin

答えて

0

あなたはすでに「本当の」ユニットテストをやっていないので、なぜ同じように順番に「ステップ」のセットを呼び出すシングル「ラッパー」のテストケース作成しない:

[Test] 
public void ShouldPassAllTests() 
{ 
    var result1 = Step1(); 
    var result2 = Step2(result1); 
    var result3 = Step3(result2); 
    Step4(result3); 
} 

private void Step1/2/3/4() 
{ 
    // Arrange Something 
    // Do Something 
    // Assert Something 
} 

その間違いなく理想的ではありませんが少なくともあなたのテストが正しい順序で実行されていることを確認しています。

このようなことに頼るのではなく、あなたのコードをよりテスト可能なものにリファクタリングして、最初から適切なテストを書くようにしてみてください。

0

セットアップでテストを行うことに躊躇していますが、ほとんどの単体テストの状況では適切ではありません。しかし、時には便利でNUnitもサポートしています。アサーションに失敗すると、フィクスチャが失敗し、すべてのテストメソッドが失敗として報告されます。

[NUnitのはないサポートがティアダウンに失敗ティアダウンで任意の例外もSuccessException、エラーが発生しているん何FWIW、。]

NUnitのユニットよりも機能しているそれ自身のいくつかのテストを持っていますこのパターンを使用します。アセンブリの負荷がいくらか高価になるのは、OneTimeSetUpで1回だけです。いくつかのアサーションは、セットアップが正しく実行されたことを検証します。次に、ロードされたアセンブリに対してさまざまな独立したテストが実行されます。

同じことを簡単に実行して、OneTimeSetUpで集計機能を実行し、さまざまな側面をチェックする4つの異なるテストを行うことができます。

私は、このようなテスト方法については、あなたがその機能に対して行う唯一のテストではない限り、何も間違っていません。それが重要なのであれば、おそらく単体テストにも値するでしょう。

関連する問題