【问题标题】:Configure the location of .coverage file when using /Enablecodecoverage in vstest.console.exe via command line通过命令行在 vstest.console.exe 中使用 /Enablecodecoverage 时配置 .coverage 文件的位置
【发布时间】:2017-06-16 00:38:19
【问题描述】:

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

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

【问题讨论】:

    标签: .net visual-studio unit-testing code-coverage vstest


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      要将 .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

      【讨论】:

      • 不幸的是,这对我所做的只是将覆盖文件复制到我指定的输出文件中。 :(
      【解决方案3】:

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


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

      是的,您必须在使用分析代码覆盖率时应用customize your .runsettings file

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

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

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

        • 运行:

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

        您可以从团队构建中获取代码覆盖率数据。 注意:确保您的 .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

      编辑 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 文件的确切名称和路径,即没有日期/时间或 guid,以便将其用作进一步处理的输入。好像不是这样,我需要通过解析测试输出来获取该路径。
      • @WilliamJockusch 抱歉回复晚了,请参阅答案中的 EditEdit 2
      • @AsifAli72090 感谢Edit2。我正在使用 vstest.console.exe 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这样的子目录
      猜你喜欢
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2014-05-15
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      相关资源
      最近更新 更多