我们的解决方案中有一些集成测试。要运行这些测试,必须在开发人员PC上安装仿真软件。但是,并非每台开发人员都安装此软件。如果未安装模拟软件,则应跳过这些测试,否则==> NullRefException。
我现在正在寻找一种方法来为test / testfixtures做一个“条件忽略”。 像
这样的东西如果(simulationFilesExist) 做testfixture 否则跳过testfixture
NUnit提供了一些有用的东西,比如忽略和显式但不安静我需要的东西。
由于
答案 0 :(得分:45)
在测试或夹具设置方法中使用一些代码来检测是否安装了模拟软件,如果不是,则调用Assert.Ignore()。
[SetUp]
public void TestSetUp()
{
if (!TestHelper.SimulationFilesExist())
{
Assert.Ignore( "Simulation files are not installed. Omitting." );
}
}
或
[TestFixtureSetUp]
public void FixtureSetUp()
{
if (!TestHelper.SimulationFilesExist())
{
Assert.Ignore( "Simulation files are not installed. Omitting fixture." );
}
}
在NUnit 3.0及更高版本中,您必须使用OneTimeSetUp
属性而不是TestFixtureSetUp
。
答案 1 :(得分:6)
NUnit还为您提供了提供Category属性的选项。根据您启动测试的方式,可能适合标记需要具有已知类别的模拟器的所有测试(例如[Category(“RequiresSimulationSoftware”)])。然后从NUnit Gui您可以选择排除某些类别。您可以从NUnit命令行运行器执行相同的操作(指定/ exclude:RequiresSimulationSoftware,如果适用)。
希望这(或者tvanfosson之前的回答)有所帮助。
答案 2 :(得分:1)
[SetUp]
public void TestSetUp()
{
if (!TestHelper.SimulationFilesExist())
{
Assert.Ignore( "Simulation files are not installed. Omitting." );
}
}
您在TestFixtureSet Attribute
中使用此类条件。但是如果这个夹具有参数化测试,那么如果你想忽略这个夹具的参数化测试,那么这将进入无限循环,你的测试将被挂起。因此,对于if条件,您可以更好地使用setup属性。
答案 3 :(得分:0)
我不想在每个测试用例中都复制 Assert.Ignore
条件,所以我最终使用了一个自定义的 Attribute
类,该类派生自 NUnitAttribute
类:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class SimulatorOnlyAttribute : NUnitAttribute, IApplyToTest
{
public void ApplyToTest(Test test)
{
if (test.RunState == RunState.NotRunnable)
{
return;
}
if (!Helper.RunsOnSimulator)
{
test.RunState = RunState.Ignored;
test.Properties.Set(PropertyNames.SkipReason, "This test should run only on simulator");
}
}
}
所以现在我可以使用新属性标记所需的测试用例:
[SimulatorOnly]
public void Test()
作为参考,您可以调查 IgnoreAttribute