根据条件忽略测试或TestFixture

问题描述 投票:28回答:3

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

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

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

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

谢谢

nunit
3个回答
46
投票

在测试或夹具设置方法中使用一些代码来检测是否安装了模拟软件,如果不是,则调用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


6
投票

NUnit还为您提供了提供Category属性的选项。根据您启动测试的方式,可能适合标记需要具有已知类别的模拟器的所有测试(例如[Category(“RequiresSimulationSoftware”)])。然后从NUnit Gui您可以选择排除某些类别。您可以从NUnit命令行运行器执行相同的操作(指定/ exclude:RequiresSimulationSoftware,如果适用)。

希望这(或tvanfosson之前的回答)有所帮助。


1
投票
[SetUp]
public void TestSetUp() 
{
     if (!TestHelper.SimulationFilesExist())
     {
         Assert.Ignore( "Simulation files are not installed.  Omitting." );
     }
}

你在TestFixtureSet Attribute中使用这种类型的条件。但是如果这个夹具有参数化测试,那么如果你想忽略这个夹具的参数化测试,那么这将进入无限循环,你的测试将被挂起。因此,如果条件更好,请使用setup属性。

© www.soinside.com 2019 - 2024. All rights reserved.