【问题标题】:Microsoft unit testing. Is it possible to skip test from test method body?微软单元测试。是否可以从测试方法体中跳过测试?
【发布时间】:2012-07-25 12:56:45
【问题描述】:

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

if (something) return;

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

【问题讨论】:

  • 我本能的反应是问为什么? =) 你可以随时使用Assert.Pass();Assert.Fail();。但除此之外......要运行测试。 =)
  • 为什么要跳过测试?你不应该返回 Assert.Fail() 或 Assert.Inconclusive() 吗?
  • 我建议 Assert.Inconclusive 超过 Assert.Fail,因为这不是一个明确的失败案例。 Inconclusive 更清楚地表明您不知道测试是成功还是失败。
  • Assert.Inconclusive 是我正在寻找的东西。谢谢。

标签: c# unit-testing mstest


【解决方案1】:

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

  • 通过[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
}

【讨论】:

  • ....非常好的选择,我正在寻找这个,无论如何感谢谢尔盖..upvoted。
【解决方案2】:

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

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

【讨论】:

  • 多年后,MSTest -> TFS 终于将 Assert.Inconclusive 识别为“Other”而不是“Fail”。如果这对您和我一样重要,请参阅github.com/Microsoft/vstest/issues/525 了解详细信息:-)。
【解决方案3】:

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

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

}

【讨论】:

  • 我认为他的意思是从测试内部以编程方式决定这一点,类似于 NUnit 的 Assume。
  • 为了简洁起见:[TestMethod, Ignore]
【解决方案4】:

有一个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

【讨论】:

    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2019-04-18
    相关资源
    最近更新 更多