活动的测试运行已中止。原因:

时间:2018-09-06 14:58:25

标签: visual-studio unit-testing visual-studio-2017 code-coverage

我正在尝试添加.runsettings文件,以便从代码覆盖率计算中排除测试项目。一切正常,直到我添加了DataCollector部分,然后收到错误消息“活动的测试运行已中止。原因:”(我真的希望他们能给我一个原因)

我将我的.runsettings文件剥离到最低限度,如果我删除它,它可以正常运行,但不收集代码覆盖率信息,如果我将它包含在内,则会在输出窗口中记录该错误,并且不返回代码覆盖率信息。如果我不使用.runsettings文件,它将运行无错误,并返回代码覆盖率信息。

我正在使用VS 2017 15.8.2(也尝试过15.9.0预览版1.0),测试是nUnit。

<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" >
    <Configuration>
      <CodeCoverage>
        <ModulePaths>
          <Include></Include>
          <Exclude></Exclude>
        </ModulePaths>

        <!-- We recommend you do not change the following values: -->
        <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
        <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
        <CollectFromChildProcesses>True</CollectFromChildProcesses>
        <CollectAspDotNet>False</CollectAspDotNet>

      </CodeCoverage>
    </Configuration>
  </DataCollector>

1 个答案:

答案 0 :(得分:0)

如果您使用自定义设置进行代码覆盖,我们建议您保留以下内容

<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>
          <CodeCoverage>
           <ModulePaths>
              <Exclude>
                 <ModulePath>.*nunit.*</ModulePath>
              </Exclude>
           </ModulePaths>
           <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
           <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
           <CollectFromChildProcesses>True</CollectFromChildProcesses>
           <CollectAspDotNet>False</CollectAspDotNet>
           <Functions>
              <Exclude>
                 <Function>^std::.*</Function>
                 <Function>^ATL::.*</Function>
                 <Function>.*::__GetTestMethodInfo.*</Function>
                 <Function>.*__CxxPureMSILEntry.*</Function>
                 <Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
                 <Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
                 <Function>.*::YOU_CAN_ONLY_DESIGNATE_ONE_.*</Function>
                 <Function>^__.*</Function>
                 <Function>.*::__.*</Function>
              </Exclude>
           </Functions>
           <Attributes>
              <Exclude>
                 <Attribute>^System.Diagnostics.DebuggerHiddenAttribute$</Attribute>
                 <Attribute>^System.Diagnostics.DebuggerNonUserCodeAttribute$</Attribute>
                 <Attribute>^System.Runtime.CompilerServices.CompilerGeneratedAttribute$</Attribute>
                 <Attribute>^System.CodeDom.Compiler.GeneratedCodeAttribute$</Attribute>
                 <Attribute>^System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</Attribute>
                 <Attribute>^Microsoft.VisualStudio.TestPlatform.TestSDKAutoGeneratedCode.*</Attribute>
              </Exclude>
           </Attributes>
           <PublicKeyTokens>
              <Exclude>
                 <PublicKeyToken>^B77A5C561934E089$</PublicKeyToken>
                 <PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>
                 <PublicKeyToken>^31BF3856AD364E35$</PublicKeyToken>
                 <PublicKeyToken>^89845DCD8080CC91$</PublicKeyToken>
                 <PublicKeyToken>^71E9BCE111E9429C$</PublicKeyToken>
                 <PublicKeyToken>^8F50407C4E9E73B6$</PublicKeyToken>
                 <PublicKeyToken>^E361AF139669C375$</PublicKeyToken>
              </Exclude>
           </PublicKeyTokens>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>

由于您正在运行基于nUnit的测试,因此我添加了将nUnit dll从覆盖范围中排除的部分。

我添加的其他部分是:

  • 我们排除的某些属性,例如DebuggerHiddenAttribute,CompilerGeneratedAttribute等
  • 使用某些通常由Microsoft使用的公用密钥令牌签名的程序集
  • 一些默认的C ++函数(库),例如std,ATL等。

由于我们进行了运行时分析,所以它们往往会导致错误,有时甚至导致崩溃。

有关如何配置覆盖范围运行设置的更多详细信息,请遵循https://docs.microsoft.com/en-us/visualstudio/test/customizing-code-coverage-analysis?view=vs-2017