Microsoft unit testing. Is it possible to skip test from test method body?

DrunkCoder picture DrunkCoder · Jul 25, 2012 · Viewed 43.9k times · Source

So I have situation when I need skip current test from test method body. Simplest way is to write something like this in test method.

if (something) return;

But I have a lot complicated tests and I need a way to skip test from methods which I invoke in current test method body. Is it possible?

Answer

Sergey Berezovskiy picture Sergey Berezovskiy · Jul 25, 2012

You should not skip test this way. Better do one of following things:

  • mark test as ignored via [Ignore] attribute
  • throw NotImplementedException from your test
  • write Assert.Fail() (otherwise you can forget to complete this test)
  • remove this test

Also keep in mind, that your tests should not contain conditional logic. Instead you should create two tests - separate test for each code path (with name, which describes what conditions you are testing). So, instead of writing:

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

Write two tests:

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

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