如何在测试运行器中出现失败测试时让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)); 
});