即使测试失败,如何使 MSTest.exe return 为 0?
How can I make MSTest.exe return a 0 even if a test fails?
我们在 TeamCity 上有一个 运行 的构建,其中包含几个不同的测试项目。他们每个 运行 一个接一个,我们使用 Rakefile 中的 MSTest.exe 来编排所有内容,因此:
desc 'Run Unit Tests'
mstest :data_test => [:build_database_tests] do |mstest|
puts build_header("Data Tests")
mstest.command = msTestCommand
mstest.parameters = [
"/resultsfile:dTest.trx",
"/detail:errormessage",
"/detail:description",
"/usestderr"
]
mstest.assemblies "../../../Database/DataTests/bin/Release/DataTests.dll"
end
这会生成一个很好的 TRX 文件,TeamCity 可以解析该文件以及所有内容,从而形成一个漂亮干净的报告选项卡。但是,如果测试失败,MSTest.exe return 为 1,rake 将其解释为失败,并导致其余测试不是 运行。
我们想抑制这种行为;我们希望构建在测试失败时继续 运行,以便我们可以看到其他测试也可能失败。我们如何让 Rake 忽略 return 代码,and/or 导致 MSTest.exe 在测试失败时不发出失败的 return 代码?
MSTest 本身将执行所有测试集,即使前一个测试集失败了。您的问题在于 Rake 所做的解释。大多数(如果不是全部)构建语言(ANT、MSBuild、Gradle 等...)具有 "Continue on error" 类似 的行为。
快速 Google 搜索 "rake continue on error" 我找到了几个链接:
http://www.rake.build/fascicles/004-ignore-failed-tasks.html
Continue Rake after failure
我得到的基本要点是,您可以使用 sh 迭代一系列任务并忽略失败,以便执行所有任务。
我们在 TeamCity 上有一个 运行 的构建,其中包含几个不同的测试项目。他们每个 运行 一个接一个,我们使用 Rakefile 中的 MSTest.exe 来编排所有内容,因此:
desc 'Run Unit Tests'
mstest :data_test => [:build_database_tests] do |mstest|
puts build_header("Data Tests")
mstest.command = msTestCommand
mstest.parameters = [
"/resultsfile:dTest.trx",
"/detail:errormessage",
"/detail:description",
"/usestderr"
]
mstest.assemblies "../../../Database/DataTests/bin/Release/DataTests.dll"
end
这会生成一个很好的 TRX 文件,TeamCity 可以解析该文件以及所有内容,从而形成一个漂亮干净的报告选项卡。但是,如果测试失败,MSTest.exe return 为 1,rake 将其解释为失败,并导致其余测试不是 运行。
我们想抑制这种行为;我们希望构建在测试失败时继续 运行,以便我们可以看到其他测试也可能失败。我们如何让 Rake 忽略 return 代码,and/or 导致 MSTest.exe 在测试失败时不发出失败的 return 代码?
MSTest 本身将执行所有测试集,即使前一个测试集失败了。您的问题在于 Rake 所做的解释。大多数(如果不是全部)构建语言(ANT、MSBuild、Gradle 等...)具有 "Continue on error" 类似 的行为。
快速 Google 搜索 "rake continue on error" 我找到了几个链接:
http://www.rake.build/fascicles/004-ignore-failed-tasks.html Continue Rake after failure
我得到的基本要点是,您可以使用 sh 迭代一系列任务并忽略失败,以便执行所有任务。