通过命令行在 vstest.console.exe 中使用 /Enablecodecoverage 时配置 .coverage 文件的位置

Configure the location of .coverage file when using /Enablecodecoverage in vstest.console.exe via command line

如果我们在 [=22= 中设置 /Enablecodecoverage,是否有办法设置 .coverage 文件所在的位置]?

我在命令行调用本身中没有看到选项。是要在.runsettings文件里设置吗?

General Command Line Options 所述,如果未指定设置文件,/Enablecodecoverage 将使用默认设置。


I did not see an option in the command line call itself. Is it to be set in the .runsettings file?

是的,只要您使用分析代码覆盖率

,您就必须customize your .runsettings file应用
  • 在命令行测试中自定义 运行 设置

    • 启动 Visual Studio 开发人员命令提示符:

      在 Windows 开始选择所有程序Microsoft Visual StudioVisual Studio 工具开发人员命令提示符.

    • 运行:

      vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings
      
  • 在构建定义中自定义 运行 设置

    您可以从团队构建中获取代码覆盖率数据。 注意:确保您的 .运行settings 文件已签入。


编辑:

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.

编辑 2:

您可以使用 /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文件

要将 .coverage 文件生成到指定目录,您必须使用 CodeCoverage.exevstest.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.

您可以在 运行 设置文件中使用 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 需要收集代码覆盖率(以前可用由于错误)。