微软单元测试。是否可以跳过测试方法体的测试?

时间:2012-07-25 12:56:46

标签: c# unit-testing mstest

所以我需要从测试方法体中跳过当前测试。 最简单的方法是在测试方法中写这样的东西。

if (something) return;

但是我有很多复杂的测试,我需要一种方法来跳过我在当前测试方法体中调用的方法的测试。 有可能吗?

4 个答案:

答案 0 :(得分:61)

你不应该以这种方式跳过测试。最好做以下事情之一:

  • 通过[Ignore]属性
  • 将测试标记为已忽略
  • 从测试中抛出NotImplementedException
  • Assert.Fail()(否则你可以忘记完成这个测试)
  • 删除此测试

还要记住,您的测试不应包含条件逻辑。相反,您应该创建两个测试 - 为每个代码路径单独测试(使用名称,描述您正在测试的条件)。所以,而不是写:

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

写两个测试:

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

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

答案 1 :(得分:40)

除了其他答案(以及建议):我建议使用Assert.Inconclusive而不是Assert.Fail,因为原始海报的情况不是明确的失败案例。

结果使用Inconclusive可以清楚地表明您不知道测试是成功还是失败 - 这是一个重要的区别。没有证明成功并不总是构成失败!

答案 2 :(得分:11)

您可以忽略测试,并在代码中保持完全不受影响。

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

}

答案 3 :(得分:0)

有一个Assert.Inconclusive()方法,可以用来很好地跳过当前测试。检查docs。基本上,它将引发异常,并将此方法显示为Skipped

我将其用作测试方法中代码的程序检查:

if (!IsEnvironmentConfigured())
{
   Assert.Inconclusive("Some message");
}

这是结果:

! ShouldTestThisMethod [31ms]

Test Run Successful.
Total tests: 92
     Passed: 91
    Skipped: 1
 Total time: 1.2518 Seconds