dotnet test 是唯一能为 q# 项目生成结构化测试报告的命令,必须配合正确配置的 .csproj 和 qdk 环境;vscode 中点击“run test”仅是调用该命令的前端,不加 --logger:"console;verbosity=detailed" 等参数则无法输出详细报告。

dotnet test 是唯一能为 Q# 项目生成结构化测试报告的命令,其他语言需依赖框架原生命令(如 jest --coverage、pytest --cov),直接调用 dotnet test 却不配 .csproj 或 QDK 环境,必然失败。
Q# 测试报告必须走 dotnet test,不是 VSCode 插件能绕过的
VSCode 侧边栏里点“Run Test”看似方便,但底层仍是调用 dotnet test。它不会自动生成 XML 报告或控制台详细日志——除非你显式加参数。很多开发者卡在“点了运行但没看到报告”,本质是漏了 --logger 和 --verbosity。
-
dotnet test --logger:"console;verbosity=detailed":强制输出每条断言、耗时、模拟器类型,适合调试单个测试 -
dotnet test --logger:"trx;LogFileName=test-results.trx":生成 Visual Studio 兼容的 TRX 文件,CI/CD 工具(如 Azure Pipelines)可直接解析 - 若想导出为 HTML 或 JSON,得额外加
--results-directory并配合第三方工具转换,dotnet test原生不支持 - 常见错误:
MSB4057: The target "Test" does not exist—— 说明TestProject.csproj没正确引用Microsoft.Quantum.Xunit或未设<ispackable>false</ispackable>
Python/JS 测试报告不能靠“点一下”生成,得改 package.json 或 pytest.ini
VSCode 的 Test Explorer UI 只负责展示,不决定报告格式。你看到的绿色/红色图标背后,是 pytest 或 jest 实际执行的命令。不改配置,就永远只有简略输出。
- Pytest:在
pyproject.toml或pytest.ini中加addopts = --cov=src --cov-report=html --cov-report=term-missing,否则pytest --cov不生效 - Jest:
jest.config.js必须含collectCoverage: true和coverageDirectory: "coverage",且package.json的test脚本要带--coverage参数 - VSCode 设置里开
"python.testing.pytestArgs"或"jest.pathToJest"只影响“怎么找命令”,不影响“命令带什么参数” - 典型坑:改了
jest.config.js但没重启 VSCode,Test Explorer 仍用旧缓存,报告不更新
覆盖率标记和测试报告是两件事,别指望 Coverage Gutters 显示“失败原因”
Coverage Gutters 扩展只读 lcov.info,它标的是“哪行被执行过”,和“测试是否通过”完全无关。很多人误以为红杠=测试失败,其实是未覆盖——哪怕所有测试都 Pass,未覆盖行照样标红。
- 覆盖率报告(
lcov.info)由jest --coverage或pytest-cov生成,路径必须严格匹配Coverage Gutters配置的coverageFilePath - 测试失败详情只能从终端输出、TRX 文件或问题面板(Problems)里看;Coverage Gutters 不解析断言堆栈
- Q# 项目无法用
Coverage Gutters:.NET 生态没有标准 lcov 输出,dotnet test不生成该格式 - 想合并看?得自己写脚本把
trx解析结果和dotnet-trace采样数据对齐——这不是 VSCode 自动做的事
真正卡住人的从来不是“怎么点”,而是搞不清哪一层负责哪部分输出:VSCode 只调度,.NET/Python/JS 框架才决定报告内容,扩展只是渲染器。漏掉任意一环的参数或路径配置,报告就断在半路。











