Dot-Net-Core

測試 .NET Core 項目時,TeamCity 不會獲取 xUnit 測試的結果

  • April 27, 2022

我有一個小型 .NET Core 項目,其中完整的建構/測試/部署過程在 Cake 腳本中處理。

我有一個執行 cake 腳本的 powershell 腳本。

在本地執行腳本時,我會得到每個失敗的 xUnit 測試的結果,但是當通過 TeamCity 的 PowerShell 執行程序執行相同的腳本時,我不會得到每個測試的結果,只是失敗測試數量的摘要。

蛋糕任務:

Task("Test")
   .IsDependentOn("Clean")
   .Does(() =>
   {
       GetFiles("./tests/**/*.csproj")
           .ToList()
           .ForEach(file => DotNetCoreTest(file.FullPath));
   });

此 Cake 程式碼在後台執行“dotnet test”。

在建構伺服器上的 PowerShell 中手動執行腳本時,我得到以下輸出:

Test run for c:\project\myproject\tests\Web.Tests\bin\Debug\netcoreapp2.0\Web.Tests.dll(.NETCoreApp,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 15.7.0
Starting test execution, please wait...
[xUnit.net 00:00:00.7397647]        Web.Tests.UnitTest1.Test1[FAIL]
Error Message:
Assert.False() Failure
Expected: False
Actual:   True
Test Run Failed.
Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.
Test Run Failed.

當使用 TeamCity 的 PowerShell 執行程序執行相同的腳本時,我得到了這個:

[14:27:45]  [Step 1/1] Test run for D:\TeamCity\buildAgent\work\7ff27c4721bc4a68\tests\Web.Tests\bin\Release\netcoreapp2.0\Web.Tests.dll(.NETCoreApp,Version=v2.0)
[14:27:45]  [Step 1/1] Microsoft (R) Test Execution Command Line Tool Version 15.7.0
[14:27:45]  [Step 1/1] Starting test execution, please wait...
[14:27:48]  [Step 1/1] Failed   Web.Tests.UnitTest1.Test1
[14:27:48]  [Step 1/1] Error Message:
[14:27:48]  [Step 1/1]  Assert.False() Failure
[14:27:48]  [Step 1/1] Expected: False
[14:27:48]  [Step 1/1] Actual:   True
[14:27:48]  [Step 1/1] Test Run Failed.
[14:27:48]  [Step 1/1] Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.

如您所見,它缺少包含失敗測試名稱的一行。

知道為什麼會這樣嗎?

使用 TeamCity 測試 .NET Core 項目一文解釋了這種行為。

你必須安裝TeamCity.VSTest.TestAdapter包來獲取測試的輸出。

不確定這是否是同一個問題,但是當我最近從 dotnet v2.0.8 升級到 v2.1.0 時遇到了類似的問題。就我而言,升級後,我不再從 Teamcity 中的單元測試中獲得任何輸出。

到目前為止,我發現的唯一解決方法是在 Team City 的單元測試建構步驟中使用 dotnet xunit CLI 工具。

注意:此命令只能在項目中使用命令“dotnet xunit -teamcity”執行。

應該可以使用 DotNetCoreTool 別名將其配置為與 Cake 一起執行。

引用自:https://stackoverflow.com/questions/50408032