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

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

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

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

後來,czd890 在博問中的回覆 「啓動單獨的一個進程進行測試,全部輸出內容都在他的進程內」 讓我恍然大悟 —— xUnit 根本沒有屏蔽控制檯輸出,只是由於 dotnet test 與 xunit runner 不在同一個進程,Console.WriteLine 在 xunit runner 進程中輸出的內容,在另一個進程中固然看不到。app

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

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

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

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

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
相關文章
相關標籤/搜索