在Teamcity中基于Xunit的特征执行测试

5

我正在将我的项目从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 的特征测试?
3个回答

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>

在提问时,这是不可用的 - 正是尝试了这个,才会抛出关于无效 XML 的错误。 - trailmax
@trailmax,哦,我明白了。好消息是现在它对我来说运行得非常好,所以也许他们已经正确地修复(或实现)了这个问题。 - Sevenate

2

在测试中使用TraitAttribute,在msbuild文件中使用Exec任务,并使用/-trait "Category=database"参数运行xunit.console.clr4.exe运行器。

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


注意,在xunit控制台运行器2或更高版本中,排除特性开关现在是-notrait,如下所示,将跳过具有数据库类别的测试:xunit.console.exe path\to\mytest.dll -notrait "Category=database" - NYCdotNet

1
尽管不是基于MSBuild,正如Josh所提到的,我已经创建了一个xunit + dotcover元运行器,支持包括和排除xunit特性、过滤器和通配符选择。这意味着您可以创建针对特定测试集的构建步骤。如果只需要测试运行器部分,您也可以排除dotcover部分。
您可以在我的文章中找到详细信息和源代码:

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


好的,下次我在使用XUnit的项目中会试一试。 - trailmax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接