如何让dotnet test输出NUnit Inconclusive结果时逻辑清晰易懂
统计不一致的根本原因
这个矛盾来自两层语义不匹配:
- VSTest(
dotnet test的底层执行引擎)的基础结果模型最初没有为NUnit的Inconclusive(结果不确定)设置独立状态枚举,实时逐行输出时临时将这类测试归类为Skipped打印,但最终汇总统计逻辑里的Skipped计数,仅统计显式通过[Ignore]、[Explicit]特性标记跳过的测试,完全没有把Inconclusive状态的测试纳入Skipped计数,就出现了明细和汇总数字对不上的问题。 - 总测试数和你预期不符是因为你使用的
NUnit3TestAdapter版本低于4.0,该版本适配器默认会将Inconclusive状态的测试从最终汇总的总测试数中剔除,你看到的22个通过测试+12个明细里标记Skipped的Inconclusive测试,加总正好是你预期的34个总测试数。
配置调整方案
可以通过项目配置完全修正这个行为,不需要改测试代码:
- 首先将项目依赖的
NUnit3TestAdapter升级到4.0及以上版本,新版本已经修复了总测试数漏统计Inconclusive测试的问题,汇总的Total计数会和实际测试总数一致。 - 在测试项目的
.csproj文件的<PropertyGroup>节点下添加配置<NUnitDisplayInconclusiveAsSkipped>false</NUnitDisplayInconclusiveAsSkipped>,执行测试时逐行输出就不会再把Inconclusive测试错误标记为Skipped,会单独标注对应状态。 - 运行测试命令时追加详细日志参数
dotnet test --logger "console;verbosity=detailed",汇总区域会单独列出Inconclusive测试的数量,不会再出现状态标记和计数矛盾的问题。
配置输出显示跳过原因
可以实现你要的带原因的输出效果:
NUnit3TestAdapter4.5及以上版本原生支持输出跳过/不确定原因,只需要在.csproj的<PropertyGroup>节点下添加配置<NUnitShowSkippedReason>true</NUnitShowSkippedReason>即可。- 配置生效后,逐行输出会自动携带状态原因,Inconclusive测试的输出格式会和你预期一致,类似
Skipped MyTest [16 ms] Reason: Inconclusive,如果你在写Assert.Inconclusive()时传入了自定义原因字符串,也会一并显示在Reason后面。 - 如果你在
Assert.Ignore()、[Ignore("原因")]里写了跳过原因,也会同步在逐行输出里展示,不需要额外改日志逻辑。
内容的提问来源于stack exchange,提问作者Jocelyn
相关产品推荐
相关产品推荐

