2014-02-15 108 views
5

我正在將我的項目從NUnit移動到xUnit測試框架。我們通過MSBuild任務在TeamCity中執行測試。我想按類別排除測試。在NUnit和Teamcity中這很簡單。執行基於Xunit的測試,通過Teamcity中的特性過濾

我該如何在xUnit中解決這個問題?

的MSBuild目標看起來是這樣的:

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

理想我想添加Exclude="Category=database"<xunit>元素的屬性,但這是無效的。

我迅速查看了xUnit源代碼,並沒有找到msbuild runner的這個選項。

任何其他替代品忽略測試的性能在msbuild亞軍?

回答

2

在測試中使用TraitAttribute,使用msbuild文件中的Exec任務和使用/-trait "Category=database"參數的xunit.console.clr4.exe運行程序。

另一種方法是不使用msbuild,而是在TeamCity中直接運行xunit控制檯的額外步驟。您可以在xunit項目文件中指定程序集。這是我在TeamCity和XUnit.net中使用的解決方案。我將xunit項目文件保存在我的解決方案項目文件夾中,並手動將測試程序集添加到它。

+0

注意,在xUnit的控制檯亞軍2或更高時,通過特徵開關排除現在'-notrait',在其下面將跳過與類別數據庫的測試:'xunit.console.exe路徑\到\ mytest.dll -notrait「類別=數據庫」' – NYCdotNet

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> 
+0

在問題的時候,這是不可用的 - 完全是嘗試和錯誤無效xml被拋出。 – trailmax

+0

@trailmax,哦,我明白了。好吧,好東西現在對我來說工作得很好,所以他們可以正確地修正(或實施)這個。 – Sevenate

+0

現在好了。我會在下一個項目中嘗試它。 – trailmax

1

雖然不是基於MSBuild的和喜歡喬希提到的,我已經創建了一個的xUnit + dotcover支持包括和不包括xunit特徵,過濾器和通配符選擇的元運行器。這意味着您可以創建針對特定測試集的構建步驟。如果您只需要測試跑步者部分,您也可以排除dotcover的部分。

你可以在我的帖子的細節和來源:

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

+0

很酷。我將在下一個與XUnit合作的項目中對它進行一次討論 – trailmax