C# 微软单元测试。是否可以从测试方法主体中跳过测试?
所以,当我需要从测试方法体中跳过当前测试时,我会遇到这种情况。 最简单的方法是在测试方法中编写类似的内容C# 微软单元测试。是否可以从测试方法主体中跳过测试?,c#,unit-testing,mstest,C#,Unit Testing,Mstest,所以,当我需要从测试方法体中跳过当前测试时,我会遇到这种情况。 最简单的方法是在测试方法中编写类似的内容 if (something) return; 但我有很多复杂的测试,我需要一种从我在当前测试方法体中调用的方法中跳过测试的方法。 可能吗?您不应该以这种方式跳过测试。最好做以下事情之一: 通过[Ignore]属性将测试标记为已忽略 从测试中抛出NotImplementedException 写入Assert.Fail()(否则您可能会忘记完成此测试) 删除此测试 还要记住,您的测试不应
if (something) return;
但我有很多复杂的测试,我需要一种从我在当前测试方法体中调用的方法中跳过测试的方法。
可能吗?您不应该以这种方式跳过测试。最好做以下事情之一:
- 通过
属性将测试标记为已忽略[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
}
您可以忽略一个测试,并在代码中保持它完全不变
[TestMethod()]
[Ignore()] //ignores the test below
public void SomeTestCodeTest()
{
//test code here
}
对于其他答案(以及建议的):我建议使用
Assert.Inconclusive
而不是Assert.Fail
,因为原始海报的情况不是明确的失败案例
因此,使用
非决定性的
可以清楚地表明,您不知道测试是成功还是失败,这是一个重要的区别。不证明成功并不总是失败 有一个Assert.Inconclusive()
方法,您可以使用它很好地跳过当前测试。检查一下。基本上,它将抛出一个异常,并将此方法显示为跳过的
我将其用作测试方法中代码的编程检查:
if (!IsEnvironmentConfigured())
{
Assert.Inconclusive("Some message");
}
结果如下:
! ShouldTestThisMethod [31ms]
Test Run Successful.
Total tests: 92
Passed: 91
Skipped: 1
Total time: 1.2518 Seconds
我完全本能的反应是问为什么您可以始终执行
Assert.Pass()代码>或Assert.Fail()代码>。但除此之外。。。测试将在那里运行。=)为什么不参加考试?您是否应该返回Assert.Fail()或Assert.Inconclusive()?我建议Assert.Inconclusive
而不是Assert.Fail
,因为这不是一个明确的失败案例Inconclusive
更清楚地表明,您不知道测试是成功还是失败。Assert.Inconclusive
是我要找的东西。谢谢。我想他的意思是从测试内部以编程方式决定这一点,类似于NUnit的假设。为了简洁起见:[TestMethod,Ignore]许多年后,MSTest->TFS最终将Assert.Inconclusive识别为“其他”,而不是“失败”。查看详细信息,了解这对您是否和对我一样重要:-)……非常好的选择,我一直在寻找这个,无论如何谢谢Sergey..投了赞成票。