终端测试报告器是向终端(控制台)报告状态和进度的内置实现。 它是核心组件Microsoft.Testing.Platform (MTP)的一部分,不需要任何其他 NuGet 包。
输出模式
有两种输出模式可用:
Normal,输出包含横幅,报告测试失败详情、警告消息,并写入运行摘要。
Detailed,与Normal相同,但它也报告Passed测试。
ANSI
在内部,有 2 个不同的输出格式化程序在自动检测终端功能,以便处理 ANSI 转义代码。
- 当终端能够呈现转义代码时,将使用 ANSI 格式化程序。
- 当终端无法处理转义代码、使用
--no-ansi或重定向输出时,将使用非 ANSI 格式化程序。
默认为自动检测功能。
进度
进度指示器将写入终端。 进度指示器显示通过的测试数、失败的测试数和跳过的测试,后跟测试程序集的名称、其目标框架和体系结构。
进度栏基于所选模式编写:
- ANSI,进度栏是动画的,粘附在屏幕底部,每 500 毫秒刷新一次。 完成测试执行后,进度栏会隐藏。
- 非 ANSI,按每 3 秒将进度栏写入屏幕。 进度将保留在输出中。
直接控制台输出和进度重绘
若要对进度栏进行动画处理,ANSI 进度呈现器控制终端光标,并重复重绘屏幕底部。 在此次重绘期间,任何直接写入 stdout 或 stderr 且不在测试框架捕获路径内的文本都可能被覆盖或移除。 例如,从汇编级或会话级生命周期代码(例如 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 (也接受true、enable、1和off(也接受false)disable0。 |
--no-ansi |
— | 禁用将 ANSI 转义字符输出到屏幕。 |
--ansi |
2.3.0 | 控制是否输出 ANSI 转义字符。 有效值为auto(默认值)、 on (也接受true、enable、1和off(也接受false)disable0。 |
--output |
— | 指定报告测试时的输出详细程度。 有效值为 Normal 和 Detailed。 默认值为 Normal。 |
--show-stdout |
2.2.1 | 确定何时显示测试捕获的标准输出。 有效值为:All、Failed 和 None。 默认值为 All。 |
--show-stderr |
2.2.1 | 确定何时显示测试捕获的错误输出。 有效值为:All、Failed 和 None。 默认值为 All。 |
注释
MTP 版本列中的短划线(-)标记未绑定到特定版本的核心选项,因为它们自平台的初始版本以来一直可用。
注释
从 MTP 2.3.0 开始,当 MTP 检测到自己在 LLM 或 AI 工具环境中运行时,会隐藏启动横幅,并将 --show-stdout 和 --show-stderr 的默认值从 All 更改为 Failed,以减少干扰。