根据条件忽略测试或TestFixture

时间:2009-10-20 12:35:28

标签: nunit

我们的解决方案中有一些集成测试。要运行这些测试,必须在开发人员PC上安装仿真软件。但是,并非每台开发人员都安装此软件。如果未安装模拟软件,则应跳过这些测试,否则==> NullRefException。

我现在正在寻找一种方法来为test / testfixtures做一个“条件忽略”。 像

这样的东西

如果(simulationFilesExist) 做testfixture 否则跳过testfixture

NUnit提供了一些有用的东西,比如忽略和显式但不安静我需要的东西。

由于

4 个答案:

答案 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

的源代码