NUnit 在 SetUp 中取消测试

NUnit cancel a test in SetUp

我们使用 NUnit 进行自动化测试,并且我们有一些必须满足的标准才能进行 运行 测试。特别是,我们正在使用 Xamarin.UITest 进行移动 UITesting,我们需要检查我们当前是否正在测试我们想要测试的平台。不幸的是,我们无法使用类别来做到这一点。

我们现在的做法是列出我们要测试的平台。在 [SetUp] 方法中,我们然后检查当前平台是否包含在该列表中,如果不包含,我们将中止测试。目前,我们通过让测试失败 Assert.Fail() 来中止测试。然而,我们更愿意让测试静静地退出,没有失败也没有成功消息,就好像它从来没有 运行 一样。这甚至可能吗?如果可以,该怎么做?

这是当前代码:

private IList<Platform> _desiredPlatforms;

public IList<Platform> DesiredPlatforms
{
    get
    {
        if (_desiredPlatforms == null)
        {
            // read from environment variable
        }
        return _desiredPlatforms;
    }
}

[SetUp]
public void BeforeEachTest()
{
   // Check if the current platform is desired
   if (!DesiredPlatforms.Contains(_platform))
   {
        Assert.Fail("Aborting the current test as the current platform " + _platform + " is not listed in the DesiredPlatforms-list");
   }
   _app = AppInitializer.Instance.StartApp(_platform, _appFile);
}

听起来 Assert.Inconclusive() or Assert.Ignore() 更符合您的要求。

我怎么想你 真的 想要这样做,但是,使用与 NUnit PlatformAttribute - which will skip the tests on the irrelevant platforms. The NUnit PlatformAttribute isn't implemented for the .NET Standard/PCL versions of the framework yet - however, there's no reason you couldn't make a Custom Attribute, to do a similar thing for your particular case. You can look at the NUnit code for the PlatformAttribute as an example, and write your own equivalent of PlatformHelper 等效的东西来检测你感兴趣的平台。

编辑:我已经链接到 NUnit 3 文档,但只阅读 Xamarin.UITest 仅限于 NUnit 2.x。我相信我所说的一切在 NUnit 2 中都是等效的——您可以在这里找到 NUnit 2 文档:http://nunit.org/index.php?p=docHome&r=2.6.4