使用以下 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));
});
即使有一些失败的测试,对 OpenCover 的调用也不会像预期的那样失败并出现异常。
如果单元测试实际上失败了,有没有办法告诉 OpenCover 失败?
最佳答案
OpenCoverSettings类包含 ReturnTargetCodeOffset属性(property)。通过将其设置为 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));
});
关于c# - 当 Test Runner 中有失败的测试时,如何让 OpenCover 返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38935834/