执行基于Xunit的测试,由Teamcity中的特征过滤

时间:2014-02-15 00:16:30

标签: msbuild teamcity xunit xunit.net

我正在将我的项目从NUnit移动到xUnit测试框架。我们正在通过MSBuild任务在TeamCity中执行测试。我想按类别排除测试。在NUnit和Teamcity中,这很简单。

我将如何在xUnit中进行此操作?

Msbuild目标如下所示:

  <Target Name="xUnitTests">
    <xunit Assembly="$(SolutionDir)\Tests\bin\Debug\MyApp.Tests.exe" />
  </Target>

理想情况下,我想将Exclude="Category=database"作为属性添加到<xunit>元素,但这无效。

我很快查看了xUnit源代码,但没有找到msbuild runner的这个选项。

忽略msbuild runner中traits测试的其他选择吗?

3 个答案:

答案 0 :(得分:5)

我只是通过我如何做的简单例子来扩展Josh Gallagher的答案。假设您有以下测试:

[Fact]
[Trait("Category", "Integration")]
public async Task Test_for_long_running_operation()
{
    var someClass = new SomeClass();
    int result =  await someClass.LongRunningOperationAsync()
    Assert.Equal(5, result);
}

[Fact]
[Trait("Category", "Unit")]
public void Test_for_quick_operation()
{
    var someClass = new SomeClass();
    int result =  someClass.GetSomeNumber()
    Assert.Equal(3, result);
}

您可以在msbuild目标文件中包含以下内容:

<Target Name="xUnitTests">
    <!-- For debug builds: skipping long integration tests -->
    <xunit Condition="'$(Configuration)' == 'Debug'"
           ExcludeTraits="Category=Integration"
           Assembly="$(SolutionDir)\Tests\bin\Debug\MyApp.Tests.exe" />

    <!-- For release builds: run them all -->
    <xunit Condition="'$(Configuration)' == 'Release'"
           Assembly="$(SolutionDir)\Tests\bin\Debug\MyApp.Tests.exe" />
</Target>

答案 1 :(得分:2)

使用测试中的TraitAttribute,msbuild文件中的Exec任务和带有/-trait "Category=database"参数的xunit.console.clr4.exe运行程序。

另一种方法是不使用msbuild,而是在TeamCity中创建一个额外的步骤,直接运行xunit控制台。您可以在xunit项目文件中指定程序集。这是我以前在TeamCity和XUnit.net中使用的解决方案。我将xunit项目文件保存在我的解决方案项目文件夹中,并手动将测试程序集添加到其中。

答案 2 :(得分:1)

虽然不是基于MSBuild和Josh提到的,但我创建了一个xunit + dotcover元运行器,支持包含和排除xunit特征,过滤器和通配符选择。这意味着您可以创建针对特定测试集的构建步骤。如果您只需要测试运行器部件,也可以排除dotcover的部件。

您可以在我的帖子中找到详细信息和来源:

http://www.wwwlicious.com/2015/09/25/teamcity-dotcover-xunit-at-last/