.net core 用于NET CORE 2.0的Console.WriteLine不';我不能在Windows上的xUnit中工作

.net core 用于NET CORE 2.0的Console.WriteLine不';我不能在Windows上的xUnit中工作,.net-core,xunit,.net Core,Xunit,建议如何在.NET CORE 2.0 C#函数中写入控制台,这些函数链接到控制台应用程序或xUnit测试 我在simply Console.WriteLine上获得了一些成功,但只在linux上使用了dotnet测试。在Windows上,“dotnet test”不生成任何控制台输出,除了有关通过的测试数和失败的测试数的统计信息 在谷歌上搜索这个问题,我发现了2015年的ITestOutputHelper线程,这些线程看起来过时了,或者引用了Visual Studio。我不使用VisualStu

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

我在simply Console.WriteLine上获得了一些成功,但只在linux上使用了
dotnet测试。在Windows上,“dotnet test”不生成任何控制台输出,除了有关通过的测试数和失败的测试数的统计信息

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

此外,ITestOutputHelper只是一个微不足道的接口:

  • 它没有解决任何问题:当然,我可以重写所有的测试代码来调用_output.WriteLine而不是Console.WriteLine,但是我如何实例化ITestOutputHelper(官方文档在这个问题上仍然含糊不清:)

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


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

    您只需将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包

    我知道这是一个较旧的线程,但我被困在同一个问题上。我尝试了ITestOutputHelper注入,但仍然没有在VS代码中向终端或输出窗口写入任何内容。这是我的(简单的,演示)代码。它可以很好地运行测试,但不会在任何地方输出字符串

    using Xunit;
    using Xunit.Abstractions;
    using Demo;
    using System;
    
    namespace Demo.Tests
    {
        public class Demo_IsPrimeShould
        {
            private readonly ITestOutputHelper _output;
            private readonly Demo _demo;
    
            public Demo_IsPrimeShould(ITestOutputHelper output)
            {
                _demo = new Demo();
                _output = output;
            }
    
            [Theory]
            [InlineData(-1)]
            [InlineData(0)]
            [InlineData(1)]
            public void IsPrime_Input_ReturnsFalse(int value)
            {
                _output.WriteLine("HELLO"); //why doesn't this work?
                var result = _demo.IsPrime(value);
                Assert.False(result, $"{value} should not be prime");
            }
        }
    }
    

    我的解决方法是使用
    Console.Error.WriteLine
    而不是Console.WriteLine。

    xUnit.net有自己的
    dotnet xUnit
    命令,