TeamTest に「MyClassTest」という単体テスト プロジェクトがあります。このプロジェクトには 3 つの TestMethods があります。各メソッドには、独自のテスト初期化手順が必要です。しかし、TestInitializeAttributeを 3 つの初期化メソッドに適用すると、属性を複数回使用してはならないというメッセージが表示されます。では、Visual Studio Team Test で各テスト メソッドを初期化するために使用する属性は何でしょうか?
参照:
TeamTest に「MyClassTest」という単体テスト プロジェクトがあります。このプロジェクトには 3 つの TestMethods があります。各メソッドには、独自のテスト初期化手順が必要です。しかし、TestInitializeAttributeを 3 つの初期化メソッドに適用すると、属性を複数回使用してはならないというメッセージが表示されます。では、Visual Studio Team Test で各テスト メソッドを初期化するために使用する属性は何でしょうか?
参照:
MSDNによるとTestInitializeAttribute
:
TestInitializeAttribute
。TestInitialize
したがって、私の提案は、属性なしで Test Initialize Methods を作成することです。TestInitialize
次に、現在実行されている一意のメソッドをチェックしTestMethod
、適切な初期化メソッドを呼び出します。
[TestClass]
public class UnitTest
{
public TestContext TestContext { get; set; }
[TestInitialize]
public void Initialize()
{
switch (TestContext.TestName)
{
case "TestMethod1":
this.IntializeTestMethod1();
break;
case "TestMethod2":
this.IntializeTestMethod2();
break;
default:
break;
}
}
[TestMethod]
public void TestMethod1()
{
}
[TestMethod]
public void TestMethod2()
{
}
public void IntializeTestMethod1()
{
//Initialize Test Method 1
}
public void IntializeTestMethod2()
{
//Initialize Test Method 2
}
}
3つのテストメソッドがあり、各メソッドに独自の初期化ステップがある場合、すべてのテストの前に実行されるメソッドに初期化を移動するのはなぜですか?私が見る唯一の利点は、ソースファイルにいくつかの行を追加するその素晴らしいスイッチブロックです。ただし、欠点があります。これらのテストメソッドのいずれかを見ると、どのコンテキストメソッドが実行されるかを実際に判断することはできません。そのため、初期化メソッドを使用して、フィクスチャのすべてのテストで実際に使用される基本的なコンテキストのみを設定します。
コンテキスト作成をarrange
各メソッドの一部に移動するだけです。
共通のコンテキストを使用する複数のメソッドがある場合は、メソッドを抽出するだけで、それらのコンテキストがセットアップされ、arrange
パーツで呼び出されます。また、各コンテキスト設定をいくつかのステップに分割し、それらのステップを再利用することもできます(SpecflowなどのGiven-When-Thenツールで行われるように)。
そしてもちろん、さまざまな器具を作成することもできます。
3 つの個別の初期化が必要な場合。その場合、おそらくそれぞれが独自の init を持つ 3 つの個別のフィクスチャにあるはずです!