以下に示すのは、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
同じ問題を抱えている人を他に見つけられませんでした。何が間違っていますか?