8

以下に示すのは、Windows Phone ユニット テスト アプリで Mtest を使用して記述されたコードです。
TestMethod1 という通常の TestMethod と 3 つの DataRows を持つTestMethod2という DataTestMethodがあります。

[TestClass]
public class UnitTest1
{
    [TestInitialize]
    public void Setup()
    {
        Debug.WriteLine("TestInitialize");
    }

    [TestMethod]
    public void TestMethod1()
    {
        Debug.WriteLine("TestMethod1");
    }

    [DataTestMethod]
    [DataRow("a")]
    [DataRow("b")]
    [DataRow("c")]
    public void TestMethod2(string param)
    {
        Debug.WriteLine("TestMethod2 param=" + param);
    }

    [TestCleanup]
    public void TearDown()
    {
        Debug.WriteLine("TestCleanup");
    }
}

デバッグ モード (Visual Studio では Ctrl+R、Ctrl+T) でテストを実行すると、出力パネルに次のように表示されます。

TestInitialize
TestMethod1
TestCleanup
TestInitialize
TestMethod2 param=c
TestMethod2 param=a
TestMethod2 param=b
TestCleanup

ご覧のとおり、TestInitialize は 2 回だけ実行されました。1 回は TestMethod1 の前、もう 1 回は TestMethod2 の前にパラメータ c を指定して実行されました。
これは、TestMethod1 の後に 1 回実行され、最後に 1 回実行された TestCleanup についても同じです。

TestMethod か DataTestMethod かに関係なく、各テストの前後に TestInitialize と TestCleanup が実行されることを期待します。そうしないと、1 つのテストの実行が次のテストに影響を与える可能性があります。

私はそれが次のようになると予想しました:

TestInitialize
TestMethod1
TestCleanup
TestInitialize
TestMethod2 param=c
TestCleanup
TestInitialize
TestMethod2 param=a
TestCleanup
TestInitialize
TestMethod2 param=b
TestCleanup

同じ問題を抱えている人を他に見つけられませんでした。何が間違っていますか?

4

1 に答える 1