.NET Core项目测试时TeamCity无法捕获xUnit测试完整结果
问题原因分析
这个差异其实是TeamCity内置的测试结果解析功能导致的,并非脚本或者dotnet test命令本身的问题,具体来说:
本地运行的原生输出:当你在本地PowerShell执行时,
dotnet test直接输出xUnit测试框架的原生日志,其中包含[xUnit.net 00:00:00.7397647] Web.Tests.UnitTest1.Test1[FAIL]这种带有时间戳和框架标识的失败测试标记行,这是xUnit的默认控制台输出格式。TeamCity的日志转换:TeamCity的PowerShell运行器(以及TeamCity整体)会自动识别并解析
dotnet test输出的测试相关日志。它会把xUnit原生的失败标记行转换为自己的结构化格式(也就是你看到的Failed Web.Tests.UnitTest1.Test1),同时将错误信息拆分成单独的行展示。这么做的目的是为了在TeamCity的构建结果→Tests标签页里提供更友好的测试结果可视化:你可以直接看到所有失败测试的列表,点击单个测试就能查看完整的错误堆栈和详情,比原生文本日志更易读。
验证与可选调整
- 验证测试详情:去你的TeamCity构建结果页面,找到
Tests标签,里面应该能完整看到失败测试的名称、错误信息、断言详情,甚至可以关联到测试代码(如果配置了代码导航的话)。 - 如果需要保留原生日志:如果你希望在TeamCity的构建日志里保留xUnit的原生输出格式,可以修改Cake的
DotNetCoreTest调用,指定控制台日志的详细级别和格式:
另外,也可以在TeamCity的构建步骤设置里,找到测试检测相关的选项(不同版本位置可能不同),暂时关闭自动测试解析,这样就能看到原生的xUnit输出了,但代价是失去TeamCity的测试可视化功能。Task("Test") .IsDependentOn("Clean") .Does(() => { GetFiles("./tests/**/*.csproj") .ToList() .ForEach(file => DotNetCoreTest( file.FullPath, new DotNetCoreTestSettings { Logger = "console;verbosity=detailed" } ) ); });
内容的提问来源于stack exchange,提问作者Bjarte Aune Olsen
相关产品推荐
相关产品推荐

