如何在测试运行器中出现失败测试时让OpenCover返回错误?
问题描述:
当采用下面蛋糕脚本:如何在测试运行器中出现失败测试时让OpenCover返回错误?
Task("Test-xUnit")
.WithCriteria(() => DirectoryExists(parameters.Paths.Directories.PublishedxUnitTests))
.Does(() =>
{
EnsureDirectoryExists(parameters.Paths.Directories.xUnitTestResults);
OpenCover(tool => {
tool.XUnit2(GetFiles(parameters.Paths.Directories.PublishedxUnitTests + "/**/*.Tests.dll"), new XUnit2Settings {
OutputDirectory = parameters.Paths.Directories.xUnitTestResults,
XmlReport = true,
NoAppDomain = true
});
},
parameters.Paths.Files.TestCoverageOutputFilePath,
new OpenCoverSettings()
.WithFilter(testCoverageFilter)
.ExcludeByAttribute(testCoverageExcludeByAttribute)
.ExcludeByFile(testCoverageExcludeByFile));
});
即使有一些失败的试验中,调用OpenCover不与预期的异常失败。
有没有办法告诉OpenCover失败,如果有实际失败的单元测试?
答
OpenCoverSettings类包含ReturnTargetCodeOffset属性。通过将其设置为0,您告诉OpenCover返回目标进程的返回代码,而不是它自己的返回代码。你可以找到更多关于这个here的信息。有了这个功能,Cake会在出现失败的测试时正确处理非零退出代码,并且由于失败的测试而抛出异常。
上面代码段应被改变为以下:
Task("Test-xUnit")
.WithCriteria(() => DirectoryExists(parameters.Paths.Directories.PublishedxUnitTests))
.Does(() =>
{
EnsureDirectoryExists(parameters.Paths.Directories.xUnitTestResults);
OpenCover(tool => {
tool.XUnit2(GetFiles(parameters.Paths.Directories.PublishedxUnitTests + "/**/*.Tests.dll"), new XUnit2Settings {
OutputDirectory = parameters.Paths.Directories.xUnitTestResults,
XmlReport = true,
NoAppDomain = true
});
},
parameters.Paths.Files.TestCoverageOutputFilePath,
new OpenCoverSettings { ReturnTargetCodeOffset = 0 }
.WithFilter(testCoverageFilter)
.ExcludeByAttribute(testCoverageExcludeByAttribute)
.ExcludeByFile(testCoverageExcludeByFile));
});