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

rsj*_*nso 6 .net unit-testing code-coverage visual-studio vstest

如果我们在vstest.console.exe中设置,有没有办法设置.coverage文件所在的位置?/Enablecodecoverage

我没有在命令行调用中看到一个选项.是否要在.runsettings文件中设置?

小智 7

您可以使用运行设置文件中的节点更改名称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>
Run Code Online (Sandbox Code Playgroud)

然后从命令行运行:

vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:myrunsettings.runsettings
Run Code Online (Sandbox Code Playgroud)

注意:如果有人可以测试这一点,我将不胜感激,因为我没有 Visual Studio 2019 Enterprise,并且截至 2019 年,Enterprise 需要收集代码覆盖率(之前由于错误而可用)。


537*_*037 6

常规命令行选项中所述/Enablecodecoverage如果未指定设置文件,则使用默认设置。


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

是的,每当您使用Analyze Code Coverage时,都必须自定义您的.runsettings文件

  • 在命令行测试中自定义运行设置

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

      在Windows“ 开始”上选择“所有程序”,“ Microsoft Visual Studio”,“ Visual Studio工具”,“ 开发人员命令提示符”

    • 跑:

      vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings
      
      Run Code Online (Sandbox Code Playgroud)
  • 在构建定义中自定义运行设置

    您可以从团队构建中获取代码覆盖率数据。 在此处输入图片说明 注意:确保已签入.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");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

CodeCoverage.exe是另一个覆盖工具转换成* .xml格式阅读更多

编辑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"
Run Code Online (Sandbox Code Playgroud)

上面的命令将在目录TestResults下生成.coverage文件。

  • @AsifAli72090 感谢 **Edit2**。我正在使用 vstest.console.exe `Microsoft (R) 测试执行命令行工具版本 15.8.0`,它报告 `/UseVsixExtensions 已被弃用。请改用 /TestAdapterPath`。是否有其他方法可以在 **TestResults** 目录下生成 .coverage 字段,而不是像 `TestResults\c193b54b-d7fe-4617-9b4c-0fafd541bcd6` 这样的子目录 (3认同)
  • 这里绝对有很多有用的信息,这是一个很好的开始。我真正希望做的是控制输出 .coverage 文件的确切名称和路径,即没有日期/时间或 guid,以便将其用作进一步处理的输入。似乎不然,我需要通过解析测试输出来获取该路径。 (2认同)