0

我们使用 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);
}
4

1 回答 1

3

听起来Assert.Inconclusive()Assert.Ignore()更适合您正在寻找的内容。

然而,我想你真正想要这样做的方式是使用与 NUnit 的PlatformAttribute等效的东西——它将跳过不相关平台上的测试。NUnit PlatformAttribute 尚未针对框架的 .NET Standard/PCL 版本实现 - 但是,您没有理由不能制作自定义属性,为您的特定情况做类似的事情。您可以查看 PlatformAttribute 的 NUnit 代码作为示例,并编写自己的PlatformHelper等效项,以检测您感兴趣的平台。

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

于 2017-05-26T12:21:15.490 回答