【发布时间】:2017-06-16 00:38:19
【问题描述】:
如果我们在vstest.console.exe中设置/Enablecodecoverage,有没有办法设置.coverage文件所在的位置?
我没有在命令行调用本身中看到选项。是否要在 .runsettings 文件中设置?
【问题讨论】:
标签: .net visual-studio unit-testing code-coverage vstest
如果我们在vstest.console.exe中设置/Enablecodecoverage,有没有办法设置.coverage文件所在的位置?
我没有在命令行调用本身中看到选项。是否要在 .runsettings 文件中设置?
【问题讨论】:
标签: .net visual-studio unit-testing code-coverage vstest
您可以在运行设置文件中使用CoverageFileName 节点更改名称,我相信使用ResultsDirectory 节点设置输出位置,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<!-- Path relative to directory that contains .runsettings file-->
<ResultsDirectory>.\TestResults</ResultsDirectory>
</RunConfiguration>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CoverageFileName>myname.coverage</CoverageFileName>
<CodeCoverage>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
然后从命令行运行:
vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:myrunsettings.runsettings
注意:如果有人能对此进行测试,我将不胜感激,因为我没有 Visual Studio 2019 Enterprise,并且截至 2019 年,Enterprise 需要收集代码覆盖率(由于错误,它以前可用)。
【讨论】:
要将 .coverage 文件生成到指定目录,您必须使用 CodeCoverage.exe 和 vstest.console.exe。以下将是确切的命令:
"%VSINSTALLDIR%\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" collect /output:"%CD%\VisualStudio.coverage" "%VSINSTALLDIR%\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "UnitTestProject1\bin\Debug\UnitTestProject1.dll"
在上面的输出参数中指定覆盖文件的路径和名称。您甚至不必指定 /EnableCodeCoverage。
【讨论】:
如General Command Line Options 中所述,如果未指定设置文件,/Enablecodecoverage 将使用默认设置。
我没有在命令行调用本身中看到选项。是否要在.runsettings文件中设置?
是的,您必须在使用分析代码覆盖率时应用customize your .runsettings file。
在命令行测试中自定义运行设置
启动 Visual Studio 开发人员命令提示符:
在 Windows 上开始、选择所有程序、Microsoft Visual Studio、Visual Studio 工具、开发者命令提示符。
运行:
vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings
在构建定义中自定义运行设置
vstest.console.exe默认创建*.coverage文件,然后可以将文件转换为*.xml格式。
要获取 *.coverage 文件,您可以使用以下命令:
"c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "PATH_OF_YOUR_EXECUTABLE_OR_DLL" /InIsolation /EnableCodeCoverage
在 Visual Studio 中创建一个新的命令行项目并添加对 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.Coverage.Analysis.dll 的引用。
添加以下代码(路径在这里是硬编码的,但可以作为参数提供):
using Microsoft.VisualStudio.Coverage.Analysis;
namespace CoverageConverter
{
class Program
{
static void Main(string[] args)
{
using (CoverageInfo info = CoverageInfo.CreateFromFile(
"PATH_OF_YOUR_*.coverage_FILE",
new string[] { @"DIRECTORY_OF_YOUR_DLL_OR_EXE"},
new string[] { }))
{
CoverageDS data = info.BuildDataSet();
data.WriteXml("converted.coveragexml");
}
}
}
}
CodeCoverage.exe 是另一个覆盖工具,可以转换成*.xml 格式read more。
您可以使用/UseVsixExtensions 选项和/EnableCodeCoverage 选项来启用代码覆盖:
"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
/UseVsixExtensions:true /EnableCodeCoverage "C:\Users\YourName\Documents\Visual Studio
2012\Projects\YourProjectFolder\YourApp.Tests\bin\Debug\YourApp.Tests.dll"
上面的命令会在TestResults目录下生成.coverage文件。
【讨论】:
Microsoft (R) Test Execution Command Line Tool Version 15.8.0,它报告 /UseVsixExtensions is getting deprecated. Please use /TestAdapterPath instead。有没有其他方法可以在TestResults目录下生成.coverage字段,而不是像TestResults\c193b54b-d7fe-4617-9b4c-0fafd541bcd6这样的子目录