7

皆さんに質問があります。Web サービスを呼び出している 2 つの単体テストがあります。1 つの単体テストが返す値は、別の単体テスト メソッドに使用する必要があります。

namespace TestProject1
{
    public class UnitTest1
    {
        String TID = string.empty;

        public void test1
        {
           //calling webservices and code

           Assert.AreNotEqual(HoID, hID);
           TID = hID;
        }

        public void test2
        {
           //calling webservices and code            
           string HID = TID  // I need the TID value from the Above testcase here

           Assert.AreNotEqual(HID, hID);            
        }
    }
}

ある単体テストに値を保存し、その値を別の単体テストで使用するにはどうすればよいですか。

4

3 に答える 3

8

一般に、このようなテストを書くべきではありません。テストが特定の順序で実行されることを保証することはできないため、これを行う良い方法はありません。

代わりに、テストを独立させますが、共通部分を他のテストの一部として呼び出すことができる独自の (非テスト) メソッドにリファクタリングします。

于 2012-10-24T20:25:47.253 に答える
2

値を再利用しないでください。多くの場合、テストの実行順序はランダムです (NUnit や Resharper の実行テストのような最も一般的なランナーは、ランダムな順序でテストを実行しますが、並行して実行する場合もあります)。代わりに、2 回目のテストで Web サービスを再度呼び出して ( 2 つの Web サービス呼び出しを行うことを意味する場合でも)、必要な値を取得します。

各テスト (ユニットか統合かに関係なく) には、実行に使用できるすべてのデータ/依存関係が必要です。環境/データをセットアップするために他のテストに依存しないでください。それは、それらが作成されたものではないためです。

テストは個別に考えてください。各テストは個別の存在であり、特定のシナリオを実行するために必要なすべてをセットアップ、実行、およびクリーンアップします。

于 2012-10-24T20:27:42.183 に答える
2

Oleksi の概要に従って、これをどのように整理するかの例を次に示します。

String TID = string.empty;

[TestFixtureSetUp]
public void Given() {
  //calling webservices and code
  TID = hID;
  //calling webservices and code
}

[Test]
public void assertions_call_1() {
   ...
}

public void assertions_on_call_2() {
   if (string.IsNullOrEmpty(TID))
     Assert.Inconclusive("Prerequisites for test not met");
   ...
}
于 2012-10-24T20:38:25.267 に答える