场景
- Visual Studio Online 生成定义。
- 使用 Visual Studio 测试 - 测试程序集步骤在特定 dll 中运行测试。
- 此 dll 中的测试更像是构建步骤(高度自定义的构建器(,而不是测试。
- 测试步骤将"出错时继续"设置为 false,因为我需要在其中一个构建器失败时失败。这正在按预期工作。当测试步骤失败时,生成将失败。
由于测试运行程序的更改,由于 dll 中的测试框架与生成中使用的测试运行适配器不匹配,当前未发现任何测试。(我知道如何解决这个问题,这不是问题。
问题在于,这只会在日志中生成一条信息消息,说明未发现任何测试,并警告没有要发布的测试结果,从而使构建(表面上(成功。我想摆脱的误报。
我需要做什么才能使"未发现测试"使构建失败?
我已经使用.runsettings
文件 (https://msdn.microsoft.com/en-us/library/jj635153.aspx( 研究了 vsts 测试运行程序配置,但没有看到任何获取此行为的选项?
Visual Studio Test
任务只运行测试,如果任何测试失败,生成将失败。如果您希望构建由于缺少测试而失败,Microsoft高级服务创建了一个称为构建质量检查的任务(在我撰写本文时是免费的(。此任务允许你在生成运行时强制实施各种规则。如果将最低代码覆盖率设置为 10%,则如果未找到测试,则构建将失败。
此外,您可以更正自己的任务或脚本以实现相同的目标。
可以在 Visual Studio 测试任务之后添加Powershell 任务。在电源外壳任务中:
- 通过时间线 REST API 获取以前生成任务的详细信息。
- 然后按名称(如
VsTest - testAssemblies
(搜索 Visual Studio 测试任务。 - 检查
message
值的参数是否no tests discovered
(或No results found to publish
等(问题部分。如果存在此类值,请在 powershell 任务中添加命令exit 1
以使生成失败。
Visual Studio 测试任务的示例输出显示消息No results found to publish
如下所示:
{
"id": "29b3a87c-3c5b-473f-9ab5-85eff906250e",
"parentId": "299295b6-d397-492c-958e-094ec90630f8",
"type": "Task",
"name": "VsTest - testAssemblies",
"startTime": "2017-08-08T07:37:16.18Z",
"finishTime": "2017-08-08T07:37:23Z",
"currentOperation": null,
"percentComplete": null,
"state": "completed",
"result": "succeeded",
"resultCode": null,
"changeId": 13,
"lastModified": "0001-01-01T00:00:00",
"workerName": "name",
"order": 6,
"details": null,
"errorCount": 0,
"warningCount": 2,
"url": null,
"log": null,
"task": {
"id": "ef087383-ee5e-42c7-9a53-ab56c98420f9",
"name": "VSTest",
"version": "2.0.70"
},
"issues": [
{
"type": "warning",
"category": "General",
"message": "",
"data": {
"type": "warning",
"code": "002003"
}
},
{
"type": "warning",
"category": "General",
"message": "No results found to publish.",
"data": {
"type": "warning"
}
}
]
}