即使测试失败,如何使MSTest.exe返回0?

时间:2016-01-15 16:26:04

标签: testing teamcity mstest rakefile albacore

我们有一个在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将返回1,该rake将其解释为失败,并导致其余测试无法运行。

我们想抑制这种行为;我们希望构建在测试失败时继续运行,以便我们可以看到其他测试也可能失败。如果测试失败,我们如何让Rake忽略返回代码,和/或导致MSTest.exe不发出失败的返回代码?

1 个答案:

答案 0 :(得分:2)

MSTest本身将执行所有测试集,即使前一个测试集失败也是如此。你的问题在于Rake的解释。大多数(如果不是全部)构建语言(ANT,MSBuild,Gradle等)都会出现"继续出错" 喜欢行为。

快速谷歌搜索" rake继续错误" 我找到了几个链接:

http://www.rake.build/fascicles/004-ignore-failed-tasks.html Continue Rake after failure

我得到的基本要点是你可以使用 sh 来迭代一系列任务并忽略失败,以便执行所有任务。