仅在特定平台上排除单元测试

Excluding unit tests only on specific platform

我的场景如下: 我正在使用 Xamarin.Forms 开发跨平台移动应用程序。该解决方案的一部分是针对 iOS/Android/WP8 的单元测试项目,并且在每个平台上执行的测试都在一个共享库中。

测试是使用 xUnit.Net 框架编写的。

现在我有一些测试在所有移动平台上都成功了,但在 Windows 上却没有(即当我在开发期间从 VS 中 运行 它们时):

// in a PCL (which is referenced by platform-specific unit test projects)

[Fact]
public void SomeTest()
{
    // succeeds on iOS, Android, and WinPhone
    // fails on Windows (when executed from within Visual Studio)
}

我不想 运行 在开发过程中每次都从每个移动平台进行单独测试 - 这会非常耗时。当然,我只会分块做。

结果是我有一堆在 VS 中失败的单元测试,我看不出它是 'real' 错误还是 'only' 特定于平台的问题。相反,我想立即查看问题出在哪里,而不是必须单独检查数十个红色测试。

有人知道怎么做吗?

如果您要为每个平台创建不同的构建(我相信您一定是这样),为什么不使用编译预处理器指令排除您不想 运行 的测试?

然后您可以在 VS 编译期间传入值 WINDOWS 并使用以下命令排除测试:

#if !WINDOWS

[Fact]
public void SomeTest()
{
    // succeeds on iOS, Android, and WinPhone
    // fails on Windows (when executed from within Visual Studio)
}

#endif

有关如何使用预处理器指令的更多信息,请参见此处:MSDN: C# Preprocessor Directives

可以不用traits to achieve this吗?

ie 添加一个特征,指定测试不应该在 windows 上 运行 然后你可以只执行在 visual studio 中没有这个特征的测试使用任何测试 运行您正在使用的内容。