我正在将我的项目从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测试的其他选择吗?
答案 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/