所以我需要从测试方法体中跳过当前测试。 最简单的方法是在测试方法中写这样的东西。
if (something) return;
但是我有很多复杂的测试,我需要一种方法来跳过我在当前测试方法体中调用的方法的测试。 有可能吗?
答案 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