忽略(跳过)NUnit 测试用例而不抛出异常
Ignoring (skipping) an NUnit test case without throwing an exception
我有要求 不 运行 在一个月中的某些时间进行测试用例,我想忽略或跳过相关测试适用的。到目前为止,我发现唯一有意义的属性是 Assert.Ignore();
。不幸的是,触发此方法会引发 IgnoreException
,因此不会触发 NUnit TearDown
。这并不理想,因为我有我想在每个测试用例 测试结果无关 之后执行的代码。 我的假设不正确,请在下面找到评论...
在理想情况下,我希望我可以在我忽略/跳过的代码部分中设置测试结果,例如:
else
{
//it's after the 25th of the month let's skip this test case
TestContext.CurrentContext.Result.Outcome == ResultState.Ignored;
}
但我知道 TestContext.CurrentContext.Result.Outcome
只是一个 Get
是有充分理由的,它很可能只是打开一堆蠕虫,人们只是将他们的测试设置为通过,而他们不应该等。 .
[Test]
[TestCase(TestName = "Test A")]
[Description("Test A will be testing something.")]
[Category("Regression Test Pack")]
public void Test_Case_1()
{
sessionVariables = new Session().SetupSession(uiTestCase: true);
if (DateTime.Now.Day <= 25)
{
//let's test something!
}
else
{
//it's after the 25th of the month let's skip this test case
Assert.Ignore();
}
}
[TearDown]
public void Cleanup()
{
sessionVariables.TeardownLogic(sessionVariables);
}
您可以 return
而不是进行断言。
public void Test_Case_1()
{
sessionVariables = new Session().SetupSession(uiTestCase: true);
if (DateTime.Now.Day <= 25)
{
//let's test something!
}
else
{
//it's after the 25th of the month let's skip this test case
return;
}
}
如您所见,使用 Assert.Ignore
不会导致跳过拆解。 (如果是这样,那将是一个 NUnit 错误,因为如果设置是 运行,则拆卸必须始终是 运行)
因此,您选择如何结束测试取决于您希望如何显示结果...
简单的返回会导致测试通过,没有任何特殊消息。
Assert.Pass
做同样的事情,但允许您包含一条消息。
Assert.Ignore
发出“已忽略”警告并允许您指定原因。传播警告,以便 运行 作为一个整体的结果也是“警告”。
Assert.Inconclusive
给出了一个“不确定”的结果,这意味着由于某些外部因素,测试不能 运行。您也可以指定具体原因,总体运行结果不受影响。
作为 Assert.Inconclusive
的替代方法,您可以使用 Assume.That
进行适当的测试。例如,以下代码将在当月 25 日之后触发“不确定”结果:
Assume.That(DateTime.Now.Day <= 25);
就其价值而言,“不确定”结果正是针对这种情况而设计的。这意味着测试无法 运行 由于无法控制的原因。 “忽略”结果旨在被视为最终由团队解决的问题,尽管许多人使用它的方式不同。
从 NUnit 的设计观点来看,Assume.That
是产生结果的最自然的方式。您通常会将它放在测试或 SetUp
方法的开头,在任何其他代码之前。
我有要求 不 运行 在一个月中的某些时间进行测试用例,我想忽略或跳过相关测试适用的。到目前为止,我发现唯一有意义的属性是 Assert.Ignore();
。不幸的是,触发此方法会引发 IgnoreException
,因此不会触发 NUnit 我的假设不正确,请在下面找到评论...TearDown
。这并不理想,因为我有我想在每个测试用例 测试结果无关 之后执行的代码。
在理想情况下,我希望我可以在我忽略/跳过的代码部分中设置测试结果,例如:
else
{
//it's after the 25th of the month let's skip this test case
TestContext.CurrentContext.Result.Outcome == ResultState.Ignored;
}
但我知道 TestContext.CurrentContext.Result.Outcome
只是一个 Get
是有充分理由的,它很可能只是打开一堆蠕虫,人们只是将他们的测试设置为通过,而他们不应该等。 .
[Test]
[TestCase(TestName = "Test A")]
[Description("Test A will be testing something.")]
[Category("Regression Test Pack")]
public void Test_Case_1()
{
sessionVariables = new Session().SetupSession(uiTestCase: true);
if (DateTime.Now.Day <= 25)
{
//let's test something!
}
else
{
//it's after the 25th of the month let's skip this test case
Assert.Ignore();
}
}
[TearDown]
public void Cleanup()
{
sessionVariables.TeardownLogic(sessionVariables);
}
您可以 return
而不是进行断言。
public void Test_Case_1()
{
sessionVariables = new Session().SetupSession(uiTestCase: true);
if (DateTime.Now.Day <= 25)
{
//let's test something!
}
else
{
//it's after the 25th of the month let's skip this test case
return;
}
}
如您所见,使用 Assert.Ignore
不会导致跳过拆解。 (如果是这样,那将是一个 NUnit 错误,因为如果设置是 运行,则拆卸必须始终是 运行)
因此,您选择如何结束测试取决于您希望如何显示结果...
简单的返回会导致测试通过,没有任何特殊消息。
Assert.Pass
做同样的事情,但允许您包含一条消息。Assert.Ignore
发出“已忽略”警告并允许您指定原因。传播警告,以便 运行 作为一个整体的结果也是“警告”。Assert.Inconclusive
给出了一个“不确定”的结果,这意味着由于某些外部因素,测试不能 运行。您也可以指定具体原因,总体运行结果不受影响。作为
Assert.Inconclusive
的替代方法,您可以使用Assume.That
进行适当的测试。例如,以下代码将在当月 25 日之后触发“不确定”结果:
Assume.That(DateTime.Now.Day <= 25);
就其价值而言,“不确定”结果正是针对这种情况而设计的。这意味着测试无法 运行 由于无法控制的原因。 “忽略”结果旨在被视为最终由团队解决的问题,尽管许多人使用它的方式不同。
从 NUnit 的设计观点来看,Assume.That
是产生结果的最自然的方式。您通常会将它放在测试或 SetUp
方法的开头,在任何其他代码之前。