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

时间:2018-02-17 05:18:07

标签: .net-core xunit

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

我只是运气简单的Console.WriteLine,但只有Linux上的node.js。在Windows上,“dotnet test'除了关于传递的测试次数与失败次数的统计数据之外,不产生控制台输出。

在Google上搜索问题时,我使用了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)来注册为监听器。在测试中。

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

2 个答案:

答案 0 :(得分:0)

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

public MyTestClass
{
    private readonly ITestOutputHelper _outputHelper;

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

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

请务必在上面引用“xunit.runner.visualstudio”nuget包  “xunit”nuget包。

答案 1 :(得分:0)

对我来说,解决方法是使用Console.Error.WriteLine而不是Console.WriteLine。