终端输出

终端测试报告器是向终端(控制台)报告状态和进度的内置实现。 它是核心组件Microsoft.Testing.Platform (MTP)的一部分,不需要任何其他 NuGet 包。

输出模式

有两种输出模式可用:

  • Normal,输出包含横幅,报告测试失败详情、警告消息,并写入运行摘要。 输出包含 1 次失败测试和摘要

  • Detailed,与Normal相同,但它也报告Passed测试。 输出 1 个失败的测试,1 个通过的测试,以及测试的结果总结

ANSI

在内部,有 2 个不同的输出格式化程序在自动检测终端功能,以便处理 ANSI 转义代码

  • 当终端能够呈现转义代码时,将使用 ANSI 格式化程序。
  • 当终端无法处理转义代码、使用 --no-ansi 或重定向输出时,将使用非 ANSI 格式化程序。

默认为自动检测功能。

进度

进度指示器将写入终端。 进度指示器显示通过的测试数、失败的测试数和跳过的测试,后跟测试程序集的名称、其目标框架和体系结构。

进度栏,包含 23 个通过的测试、0 个失败的测试和 0 个跳过的测试

进度栏基于所选模式编写:

  • ANSI,进度栏是动画的,粘附在屏幕底部,每 500 毫秒刷新一次。 完成测试执行后,进度栏会隐藏。
  • 非 ANSI,按每 3 秒将进度栏写入屏幕。 进度将保留在输出中。

直接控制台输出和进度重绘

若要对进度栏进行动画处理,ANSI 进度呈现器控制终端光标,并重复重绘屏幕底部。 在此次重绘期间,任何直接写入 stdoutstderr 且不在测试框架捕获路径内的文本都可能被覆盖或移除。 例如,从汇编级或会话级生命周期代码(例如 Before(Assembly)Before(TestSession) 钩子)或扩展发起的 Console.WriteLine 调用,可能会短暂闪现,然后在进度条刷新时消失。

此行为有别于针对每个测试捕获的标准输出和标准错误。 测试运行时写入的输出内容会被框架捕获,并根据 --show-stdout--show-stderr 进行显示,这样进度条就不会覆盖它。

如果你的代码必须直接写入控制台,并且你需要让该输出保持可见,请禁用进度显示(在 MTP 2.3.0 及更高版本中使用 --progress off,在早期版本中使用 --no-progress)。 或者,禁用 ANSI(在 MTP 2.3.0+ 中为 --ansi off,在更早版本中为 --no-ansi),以使用非 ANSI 进度输出;它会追加新行,而不是在原位置重绘,并且不会覆盖先前的直接输出。

选项

Option MTP 版本 Description
--no-progress 禁用向屏幕报告进度。 在 MTP 2.3.0 中已弃用,改用 --progress off
--progress 2.3.0 控制是否显示进度。 有效值为auto(默认值)、 on (也接受trueenable1off(也接受falsedisable0
--no-ansi 禁用将 ANSI 转义字符输出到屏幕。
--ansi 2.3.0 控制是否输出 ANSI 转义字符。 有效值为auto(默认值)、 on (也接受trueenable1off(也接受falsedisable0
--output 指定报告测试时的输出详细程度。 有效值为 NormalDetailed。 默认值为 Normal
--show-stdout 2.2.1 确定何时显示测试捕获的标准输出。 有效值为:AllFailedNone。 默认值为 All
--show-stderr 2.2.1 确定何时显示测试捕获的错误输出。 有效值为:AllFailedNone。 默认值为 All

注释

MTP 版本列中的短划线(-)标记未绑定到特定版本的核心选项,因为它们自平台的初始版本以来一直可用。

注释

从 MTP 2.3.0 开始,当 MTP 检测到自己在 LLM 或 AI 工具环境中运行时,会隐藏启动横幅,并将 --show-stdout--show-stderr 的默认值从 All 更改为 Failed,以减少干扰。