【问题标题】:When running `dotnet test` show output of the `dotnet vstest` output sink运行 `dotnet test` 时显示 `dotnet vstest` 输出接收器的输出
【发布时间】:2020-07-20 01:42:42
【问题描述】:

编辑:以下是原标题发布的前一个问题

xunit 在控制台运行时显示 ITestOutputHelper 输出

经过调查(参见 cmets),这个问题仍然非常相关,需要答案,但似乎应该针对 vstest 框架和输出接收器而不是 xunit 解决。

现在的具体问题是:当将某些内容写入dotnet vstest 输出接收器时,如何在从命令行运行dotnet test 时显示它。具体来说,我希望能够使用dotnet watch 设置一个观察者来连续运行测试,我更关心输出而不是结果(我将其用作测试系统,而更多地用作开发笔记本)。而且我不想局限于visual studio或vscode。

原问题:

在我的测试课中

    [Fact]
    public void Test() {

       output.WriteLine("WHATEVER");

    }
    readonly ITestOutputHelper output;

    public GroceryTests(ITestOutputHelper output) => this.output = output;

当我通过 vscode 编辑器内集成运行它时,我可以在“输出”窗格中看到输出。当我通过dotnet test 运行它时,我没有。如何通过控制台显示此输出?

【问题讨论】:

  • 在命令行上尝试-v n-v d 以提高日志级别。如果这没有提供一种方法,您可以通过装饰助手和tee将其输出到控制台并使用Console.WriteLine 来破解它? xunit 机制简单地转发到dotnet vstest 提供的测试输出接收器,该接收器被单独捕获和存储(这解决了当同时运行的测试的输出穿插时会发生什么的问题)。这东西住在github.com/microsoft/vstest
  • 所以我尝试了-v,它往往会提供关于框架本身正在做什么以及它的加载内容的输出,但似乎没有记录任何其他内容.一直在尝试跟踪消息接收器的内容,但即使我在那里找到了类型图,我该如何修改它?
  • 我个人会选择以下路径:A) 深入研究dotnet vstest B) 只需使用与 Console.WriteLine 连接的 ITestOutputHelper 进行装饰(如果它不起作用,请转到 A :( )
  • @RubenBartelink 但简单地发球到Console.WriteLine 实际上不会将输出分组到测试中。似乎这与使用 Console.WriteLine 开始并在并行运行测试时遇到所有相同的问题没有任何不同。
  • xUnit 团队表示他们无权访问此内容。 Posted a question to vstest

标签: .net vstest


【解决方案1】:

只是为了分享对我有用的东西(我不是 vstest sink 方面的专家,所以可能无法回答更深层次的问题):

我有一个这样的简单测试:

public class UnitTest1
{
    private readonly ITestOutputHelper _output;

    public UnitTest1(ITestOutputHelper output)
    {
        _output = output;
    }

    [Fact]
    public void Test1()
    {
        _output.WriteLine("My message.");
    }
}

所以如果我看 /run this test in console:

dotnet watch test --logger:"console;verbosity=detailed"

我看到如下输出:

  V XUnitTestProject1.UnitTest1.Test1 [5ms]
  Standard Output Messages:
 My message.

我正在使用 .NET Core SDK 3.1.201。

【讨论】:

  • 奇怪...我似乎和该线程中的其他几个人一样,对他们不起作用。您使用的是什么 VSTest 适配器版本?
  • 我使用的是 xunit 2.4.0 和 Microsoft.NET.Test.Sdk 16.5.0。您使用的是什么 dotnet SDK?我看到该线程中的人在使用某些 SDK 版本时看不到输出。
  • 测试应用也是netcoreapp3.1
  • 啊,终于松了口气!谢谢。适用于我在 macos 命令行上使用 net5 / xunit 2.4
【解决方案2】:

@weichch 的回答对我有用,即使没有任何特定的日志接收器使用。 命令 dotnet test -l "console;verbosity=detailed" 正在向我展示我测试的所有Console.WriteLines 就好了。并且不会太杂乱。

请注意,您可以在命令中添加--filter="Name=<MethodName>" 以使用该名称运行测试。

我的测试都有属性 [NonParallelizable]。
使用 dotnet 5

github 的这个答案中也提到了该命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多