NET CORE 2.0 的 Console.WriteLine 在 Windows 上的 xUnit 中不起作用

mip*_*pnw 5 xunit .net-core

建议如何在 .NET CORE 2.0 C# 函数中写入控制台,这些函数链接到控制台应用程序或 xUnit 测试?

我对 Console.WriteLine 有一些运气,但仅限于dotnet test在 linux 上。在 Windows 上,'dotnet test' 不产生任何控制台输出,除了有关通过和失败的测试数量的统计信息。

谷歌搜索这个问题,我运行了 2015 年的 ITestOutputHelper 线程,这些线程看起来已经过时或引用了 Visual Studio。我不使用 Visual Studio,因为我需要保持可移植到 Windows + Linux。我主要使用 VSCode 编辑器并在终端中运行大多数构建和测试命令。

此外 ITestOutputHelper 只是一个简单的接口:

  1. 它没有解决任何问题:当然我可以重写我所有的测试代码来调用 _output.WriteLine 而不是 Console.WriteLine 但是我如何实例化 ITestOutputHelper(官方文档在这个问题上仍然含糊不清:https://xunit.github。 io/docs/capturing-output.html )

  2. 我查看了 System.Diagnostics,将所有 Console.WriteLine 调用更改为 Trace.TraceInformation。不幸的是,.NET CORE 2.0 似乎没有实现 System.Diagnostics,因为我的构建找不到 System.Diagnostics.ConsoleTraceListener,我想通过在测试早期调用 Trace.Listeners.Add(myConsoleTraceListener) 将其注册为侦听器。

所以我不需要任何花哨的东西,单元测试不需要远程运行,也不需要并行运行,本地和顺序运行就可以了,只要我能在控制台看到输出。而且我需要可移植到 Windows 和 Linux,看起来这部分是对 XUnit 的要求过高。这是真的吗,有什么想法吗?

小智 3

您只需将 ITestOutputHelper 作为注入放入构造函数中即可。测试框架会自动实例化一个并将其传入。您不需要实现该接口。

public MyTestClass
{
    private readonly ITestOutputHelper _outputHelper;

    public MyTestClass(ITestOutputHelper outputHelper)
    {
        _outputHelper = outputhelper;
    }

    [Fact]
    public void MyTest()
    {
        _outputHelper.WriteLine("will go in test output");
    }
}
Run Code Online (Sandbox Code Playgroud)

确保引用“xunit”nuget 包顶部的“xunit.runner.visualstudio”nuget 包。