43

因此,当我需要从测试方法主体中跳过当前测试时,我遇到了这种情况。最简单的方法是在测试方法中写这样的东西。

if (something) return;

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

4

4 回答 4

93

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

  • [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
}
于 2012-07-25T12:58:36.193 回答
59

除了其他答案(并按照建议):我建议使用Assert.Inconclusiveover Assert.Fail,因为原始发帖人的情况不是明确的失败案例。

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

于 2012-07-25T13:24:45.053 回答
17

您可以忽略测试并在代码中完全保持原样。

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

}
于 2012-07-25T13:04:02.327 回答
1

有一种Assert.Inconclusive()方法可以用来很好地跳过当前测试。检查文档。基本上它会抛出一个异常并将这个方法显示为Skipped.

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

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

结果如下:

! ShouldTestThisMethod [31ms]

Test Run Successful.
Total tests: 92
     Passed: 91
    Skipped: 1
 Total time: 1.2518 Seconds
于 2020-05-04T23:22:14.207 回答