1

私は1つのTestメソッドでオブジェクトを作成し、コードを書き直すのではなく、残りの[TestMethod]作成します。私はクラス内のグローバル変数を宣言し、作成テストメソッドの間にそれを割り当てようとしていました。しかし、次の[TestMthod]に進むと、グローバル変数の値はnullになります。[TestMethod]から[TestMethod]の情報をC#ユニットテストフレームワークのotherに渡す

namespace ABC 
{ 
    class UnitTest 
    { 
     [TestMethod] 
     public void CreateObject() 
     { 
      var createdObject = \\ logic to create object; 
     } 

     [TestMethod] 
     public void Display() 
     { 
      //Here i want to use the created object instead of using object. 
     } 
    } 
} 

これはどのように達成できますか?

+1

TestMethodsの実行は確定的ではないため、順序を制御することはできません。 TestInitializeメソッドまたはsetup-helpメソッドは、前進の方法です。彼らはまた、私はパラレルを実行するので、独立したテストは最も安定した最も簡単な方法です。 – Jocke

+0

@Jocke実際には、テストメソッドを昇順で命名して、すべてのテストメソッドを自動化するというアイデアがありました。 。それでこれは不可能ですか? – user1168608

+0

@ user1168608可能かどうかは、ユニットテストランナーの実装の詳細です。それにもかかわらず、ユニットテストは多くの理由で互いに独立している必要があります。つまり、パフォーマンスの向上(並列化が可能)、保守性の改善などです。 –

答えて

3

ユニットテストは完全にアトミックでなければなりません。誰かが独自のユニットテストを実行したい場合や、並列実行するか、必要な順序で実行することができます。実際にしたいのは、CreateObjectメソッドを[TestInitialize]メソッドでマークすることです。 CreateObjectは単体テスト方法ではないことに注意してください。これはテスト設定方法です。

参考のために、テスト設定の属性の一覧はhereと記載されています。オブジェクトの作成方法の詳細に応じてClassInitializeを使用することもできます。

namespace ABC 
{ 
    class UnitTest 
    { 
     private object mySpecialObject; 

     [TestInitialize] 
     public void CreateObject() 
     { 
      mySpecialObject = CreateSpecialObject(); 
     } 

     [TestMethod] 
     public void Display() 
     { 
      //Here i want to use the created object instead of using object. 
      DoStuff(mySpecialObject); 
     } 
    } 
} 
関連する問題