使用以下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()
.WithFilter(testCoverageFilter)
.ExcludeByAttribute(testCoverageExcludeByAttribute)
.ExcludeByFile(testCoverageExcludeByFile));
});
Run Code Online (Sandbox Code Playgroud)
即使存在一些失败的测试,对OpenCover的调用也不会因预期的异常而失败.
有没有办法告诉OpenCover失败,如果实际上有单元测试失败?
该OpenCoverSettings类包含ReturnTargetCodeOffset财产.通过将此值设置为0,您告诉OpenCover返回目标进程的返回代码,而不是它自己的返回代码.你可以在这里找到更多相关信息.有了这个,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));
});
Run Code Online (Sandbox Code Playgroud)