我在我的 MSBuild 脚本中设置了 OpenCover,设置了 ReportGenerator,并将其作为工件输出并有一个自定义选项卡——所有这些都很好。这是我的 MSBuild 目标:
<Target Name="Test">
<!-- Check Code Coverage -->
<Exec Command="..\..\tools\OpenCover.4.0.519\OpenCover.Console.exe -register:user -target:..\..\tools\NUnit\nunit-console.exe -targetargs:"$(TestAssemblies) /xml=NUnitReport.xml /noshadow" -filter:"+[HelloWorld.Mvc3UI*]* -[HelloWorld.Mvc3UI.UnitTests*]*" -output:OpenCoverReport.xml"></Exec>
<!-- Format Code Coverage Report -->
<Exec Command="..\..\tools\ReportGenerator.1.5.0.0\ReportGenerator.exe OpenCoverReport.xml OpenCoverReport"></Exec>
</Target>
然而,为了运行 OpenCover,它附加到 NUnit 运行器以生成报告,然后运行所有单元测试。虽然这可以为单元测试生成 xml 输出,但我还没有找到一个 xsl 文件来生成与 TeamCity 7.1 中内置的报告一样好的报告,更不用说过滤和搜索功能了。
但是,如果我使用内置的 NUnit 运行程序在 TeamCity 中启用报告(显然这是在 TeamCity 中获取单元测试报告的唯一方法),它会重新运行单元测试以生成其报告。
虽然所有这些都有效,但我的问题是,是否有一种方法可以在不必运行所有单元测试两次的情况下获得这两个报告?具体来说,OpenCover 是否可以在不运行 NUnit 测试的情况下生成其报告,或者 TeamCity 是否可以在不运行单元测试的情况下生成其报告?
请注意,这是一个 ASP.NET MVC3 应用程序,OpenCover 文档没有指定如何附加 ASP.NET 或是否可能,但很明显它需要一个可执行文件才能附加。另请注意,我正在使用 NUnit 2.6.1,以防万一。