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

时间:2015-02-17 10:14:38

标签: c# unit-testing cross-platform xamarin.forms xunit.net

我的方案如下: 我正在使用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中失败了,我看不出它是不是真的'错误或只有'特定于平台的问题。相反,我想立即看到问题是什么,而不是有几十个我必须单独检查的红色测试。

有谁知道怎么做?

2 个答案:

答案 0 :(得分:1)

你能否使用traits to achieve this

即添加一个特征,指定测试不应该在Windows上运行,那么你只能使用你正在使用的测试运行器在visual studio中执行不具备此特征的测试。

答案 1 :(得分:0)

如果您为每个平台创建不同的版本(因为我确定您必须这样做),为什么不排除您不想使用编译预处理器指令运行的测试?

然后,您可以在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