2011-01-17 4 views
0

ここで何が起こっているのか理解しようとしています。変数は、しかし、変数が空で走る次のテスト// = 9 を数える_moduleInfoループ後のように、私は// asynch'dリモートコードの委任された値のフィールドを失う

// a global variable to all unit tests in the class 
    private List<ModuleInfo> _moduleInfo; 

    [TestMethod] 
    public void MyFunction() 
    { 
      _moduleInfo = new List<ModuleInfo>(); 

      netCall.MessageRecieved += 
        delegate(object sender, MessageTestRecievedEventArgs e) 
        { 
         // I get a correct response - array of Modules 
         // then try to add to global variable 
         foreach (EducateMe.Shared.Types.ModuleInfo mIn in arr) 
         { 
          _moduleInfo.Add(mIn); 
         } 
        } 

    } 

をいくつかのユニットテストを書いている - それが離れたときにそれは何とかリセットされます - どうすればこの値をテスト間で保持できますか?

更新 -

これは配列の定義方法です。 [Setup]または[TearDown]は使用されていません。

2番目の単体テストは、単にループによって作成された値を読み取ろうとするものです。したがって、MyFunction()テストは正常に終了しますが、クロージャを終了すると変数はなくなります。

乾杯

ps。これは

private TestContext testContextInstance; 

    /// <summary> 
    ///Gets or sets the test context which provides 
    ///information about and functionality for the current test run. 
    ///</summary> 
    public TestContext TestContext 
    { 
     get 
     { 
      return testContextInstance; 
     } 
     set 
     { 
      testContextInstance = value; 
     } 
    } 
+0

「/ arr」はどこに定義されていますか? – leppie

+0

おそらく愚かな質問ですが、各テストは_moduleInfo = new List ...割り当てを行いますか?テストは任意の順序で実行できますので、テストではなく定義内で実行することをお勧めします。 – Massif

+0

読んでいただきありがとうございます - 私はいくつかの更新されたコメントを追加しました。私はまた、メソッド内でないクラスでのみ変数を宣言することでこれを試みました - 同じ結果。 – MikeW

答えて

0

は、あなたが使用しているテストフレームワーク分からないのですが、NUnitの中に属性[Setup][TearDown]を持つことができる方法が、あるVS-作成されたユニットテストが付属しています。おそらく、これらの関数の1つがリストをリセットしますか?

これにもかかわらず、これはユニットテストのための非常に悪い設計です。このようにして、2つのテストの間のカップリングを設計します。したがって、最初のテストを実行せずに2回目のテストを実行することはできません。

代わりに、期待値を含むスタブを各テスト内に_ moduleInfoで埋めるユーティリティ関数を記述してください。

テストの方法については、The Art of Unit Testing: With Examples in .Netの資料があります。

0

テストごとにテストクラスの新しいインスタンスを作成するだけではないですか?それは私にはかなり合理的な挙動のようです - 一つのテストは実行された他のテストに頼るべきではありません。代わりに[SetUp]を使用する必要があるようです。

+0

それは理にかなっています。私は[Setup]メソッドを試し、それがどうなるかを見ていきます。乾杯 – MikeW