web-dev-qa-db-ja.com

マイクロソフトの単体テスト。テストメソッド本体からテストをスキップすることは可能ですか?

そのため、テストメソッド本体から現在のテストをスキップする必要がある場合があります。最も簡単な方法は、テストメソッドでこのようなものを書くことです。

if (something) return;

しかし、私には非常に複雑なテストがあり、現在のテストメソッド本体で呼び出すメソッドからテストをスキップする方法が必要です。出来ますか?

27
DrunkCoder

他の回答(および提案)に加えて:Assert.Inconclusive over Assert.Failを使用することをお勧めします。元の投稿者の状況は明示的な失敗のケースではないからです。

結果としてInconclusiveを使用すると、テストが成功したか失敗したかがわからないことが明確になります。これは重要な違いです。成功を証明しないことは、常に失敗とは限りません!

42
Dan Puzey

この方法でテストをスキップしないでください。次のいずれかを実行することをお勧めします。

  • _[Ignore]_属性を介してテストに無視のマークを付けます
  • テストからNotImplementedExceptionを投げる
  • Assert.Fail()を記述します(そうしないと、このテストの完了を忘れることがあります)
  • このテストを削除します

また、テストには条件付きロジックを含めないでください。代わりに、2つのテストを作成する必要があります-コードパスごとに個別のテスト(テストする条件を説明する名前付き)。だから、書く代わりに:

_[TestMethod]
public void TestFooBar()
{
   // Assert foo
   if (!bar)
      return;
   // Assert bar
}
_

2つのテストを作成します。

_[TestMethod]
public void TestFoo()
{
   // set bar == false
   // Assert foo
}

[Ignore] // you can ignore this test
[TestMethod]
public void TestBar()
{
   // set bar == true
   // Assert bar
}
_
64

テストを無視して、コード内で完全にそのままにしておくことができます。

[TestMethod()]
[Ignore()]    //ignores the test below
public void SomeTestCodeTest()
{
   //test code here

}
12
kmandew