终于解决 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
相关文章
相关标签/搜索