終於解決 xUnit.net 測試中無法輸出到控制台的問題


2018-8-2 更新:今天發現在 git bash 中用 dotnet test 運行 xunit 測試可以正常輸出到控制台,只是在 PowerShell 與 Windows 命令行中有這個問題。

被這個問題困擾很久了,用 dotnet test 命令運行 xUnit.net 測試項目時,測試代碼中的 Console.WriteLine() 輸出的內容在控制台總是不顯示。

之前一直以為是 xunit runner 屏蔽了控制台的輸出,昨天在博問進行了提問 —— 請問 xUnit 在 .NET Core 中是如何屏蔽控制台輸出的,今天在 xUnit 的源代碼中苦苦搜尋, 心想只要知道是怎么屏蔽的,就有辦法解除。但是,翻遍 xUnit 源代碼也沒找到對 Console.Out 動手腳的地方。

后來,czd890 在博問中的回復 “啟動單獨的一個進程進行測試,所有輸出內容都在他的進程內” 讓我恍然大悟 —— xUnit 根本沒有屏蔽控制台輸出,只是因為 dotnet test 與 xunit runner 不在同一個進程,Console.WriteLine 在 xunit runner 進程中輸出的內容,在另外一個進程中當然看不到。

罪魁禍首就是 dotnet test 所使用的 xunit runner —— xunit.runner.visualstudio ,它會在另外一個進程中運行測試,而改用 dotnet xunit 命令就可以輕松解決這個問題。

在測試項目的 .csproj 文件中添加如下的配置

<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />

dotnet xunit 運行測試成功輸出"Hello World!"

PS > dotnet xunit
Running .NET Core 2.1.0 tests for framework netcoreapp2.1...
xUnit.net Console Runner (64-bit .NET Core 4.6.26515.07)
  Discovering: XUnitConsoleOutput
  Discovered:  XUnitConsoleOutput
  Starting:    XUnitConsoleOutput
Hello World!
  Finished:    XUnitConsoleOutput
=== TEST EXECUTION SUMMARY ===
   XUnitConsoleOutput  Total: 1, Errors: 0, Failed: 0, Skipped: 0, Time: 0.194s


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM