Visual Studio vNext 项目的代码覆盖率已过时?
Visual Studio Code Coverage obsolete with vNext projects?
因为 Visual Studio(vstest.console.exe
和 codecoverage.exe
)中的代码覆盖实用程序会分析二进制文件,例如 .dll
和 .exe
文件,这些工具仍然适用于 vNext 项目(因为它们不生成二进制文件)?
我正在尝试 运行 使用 vNext class 库的解决方案的代码覆盖率,但我能够生成的唯一信息是 xUnit .dll
文件而不是我的项目。
全新的解决方案包括
- 一个ASP.NET 5预览模板空项目
- 一个 MS 测试单元测试项目
运行 测试 -> 分析代码覆盖率 - 所有测试
确实成功完成,但它只显示单元测试项目的代码覆盖率。此外,您可能已经注意到,您无法将 vNext 项目的引用添加到单元测试项目中,而且 xUnit 是当前唯一支持的测试 project framework.
我认为可以安全地假设,就目前情况而言,是的,这些工具 "broken" 适用于 vNext 项目,因为它们 运行 不属于 xunit.runner.dnx
运行纳尔。
有趣的是,同一份文档确实说明您可以从 VS Test Runner 运行 xunit.runner.dnx
进行测试,因此看起来此类问题至少在他们的雷达.
我们的团队能够使用 OpenCover 为 vNext 解决方案生成代码覆盖率文件。这需要一些开销,因为 OpenCover 按项目逐个分析,因此您需要编写一个脚本来循环解决方案中的项目,运行 OpenCover,然后合并覆盖率文件。
这是我们在脚本中所做的示例,以防有人想复制它:
我们正在遍历每个项目并调用 DNX 引擎和 OpenCover 来为该项目生成覆盖率。
foreach($projectFile in $projectFiles)
{
$project=$projectFile.Directory.Name
$buildCommands=$buildCommands+$projectFile.Directory.FullName
$testPoject = //Path//To//Test//Projects
if(Test-Path $testPoject)
{
_Verbose "$testPoject exists for $project"
$testCommand = "$OpenCoverUtil -register:user ""-excludebyfile:*\*.gen.cs"" ""-target:$DnxPath\dnx.exe "" ""-targetargs: $testPoject\project.json test"" ""-output:$Outpath\CS$project.coverage.xml"" -skipautoprops -returntargetcode -filter:""+[$project*]*"""
_Verbose $testCommand
$testCommands=$testCommands+$testCommand
}
}
因为 Visual Studio(vstest.console.exe
和 codecoverage.exe
)中的代码覆盖实用程序会分析二进制文件,例如 .dll
和 .exe
文件,这些工具仍然适用于 vNext 项目(因为它们不生成二进制文件)?
我正在尝试 运行 使用 vNext class 库的解决方案的代码覆盖率,但我能够生成的唯一信息是 xUnit .dll
文件而不是我的项目。
全新的解决方案包括
- 一个ASP.NET 5预览模板空项目
- 一个 MS 测试单元测试项目
运行 测试 -> 分析代码覆盖率 - 所有测试
确实成功完成,但它只显示单元测试项目的代码覆盖率。此外,您可能已经注意到,您无法将 vNext 项目的引用添加到单元测试项目中,而且 xUnit 是当前唯一支持的测试 project framework.
我认为可以安全地假设,就目前情况而言,是的,这些工具 "broken" 适用于 vNext 项目,因为它们 运行 不属于 xunit.runner.dnx
运行纳尔。
有趣的是,同一份文档确实说明您可以从 VS Test Runner 运行 xunit.runner.dnx
进行测试,因此看起来此类问题至少在他们的雷达.
我们的团队能够使用 OpenCover 为 vNext 解决方案生成代码覆盖率文件。这需要一些开销,因为 OpenCover 按项目逐个分析,因此您需要编写一个脚本来循环解决方案中的项目,运行 OpenCover,然后合并覆盖率文件。
这是我们在脚本中所做的示例,以防有人想复制它:
我们正在遍历每个项目并调用 DNX 引擎和 OpenCover 来为该项目生成覆盖率。
foreach($projectFile in $projectFiles)
{
$project=$projectFile.Directory.Name
$buildCommands=$buildCommands+$projectFile.Directory.FullName
$testPoject = //Path//To//Test//Projects
if(Test-Path $testPoject)
{
_Verbose "$testPoject exists for $project"
$testCommand = "$OpenCoverUtil -register:user ""-excludebyfile:*\*.gen.cs"" ""-target:$DnxPath\dnx.exe "" ""-targetargs: $testPoject\project.json test"" ""-output:$Outpath\CS$project.coverage.xml"" -skipautoprops -returntargetcode -filter:""+[$project*]*"""
_Verbose $testCommand
$testCommands=$testCommands+$testCommand
}
}