相关疑难解决方法(0)

如何从VS2012单元测试中的代码覆盖率分析中排除名称以".Test"结尾的项目

我的解决方案是使用名为"ProjectName"的项目和"ProjectName"设置的.包含我的单元测试的测试.我想从VS 2012(MS测试)下的代码覆盖分析排除测试项目,并已成功地管理通过将做到这一点ExcludeFromCodeCoverage的描述属性每个测试类在这里.

随着测试类数量的增加,排除整个测试程序集会很不错.我想使用MSDN链接中描述的.runsettings文件但似乎没有任何运气.

这是我的.runsettings文件:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <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>.*tests.*</ModulePath>
                <ModulePath>.*Tests.*</ModulePath>>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)

这导致为代码覆盖率生成空结果,如果我注释掉整个<Exclude>块,我会在所有解决方案的项目中获得代码覆盖率,包括测试(正如预期的那样,我只是想确保添加runSettings文件不会导致问题本身).

我试过加入:

<Include>
  <ModulePath>.*\.dll$</ModulePath>
  <ModulePath>.*\.exe$</ModulePath>
</Include>
Run Code Online (Sandbox Code Playgroud)

但同样,我得到空结果.我的印象是,一个空的(或不存在的)Include块将默认包含所有内容,除非与Exclude块匹配,所以我不认为这是严格要求的.

谁能指出我正确的方向?我从另一个问题中看到,我并不是唯一一个试图排除测试的人,但我想在汇编级别进行,MSDN似乎建议我可以.

tdd unit-testing visual-studio visual-studio-2012

28
推荐指数
1
解决办法
2万
查看次数

如何使用Visual Studio 2012中的runsettings文件从代码覆盖中排除服务引用?

我正在使用自定义runsettings文件来控制检查代码覆盖率的项目.我使用了Microsoft提供的默认模板,并且到目前为止能够排除我想要的项目而没有任何问题.我的下一步操作是从代码覆盖中排除在添加服务引用时由Visual Studio创建的自动生成的Web代理类.

这似乎适用于默认的runsettings模板,因为它有一个如下所示的部分:

<Attributes>
    <Exclude>
        <!-- Don’t forget "Attribute" at the end of the name -->
        <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>
    </Exclude>
</Attributes>
Run Code Online (Sandbox Code Playgroud)

添加服务引用时创建的所有类都使用GeneratedCodeAttribute进行修饰,因此应排除它们.但是,当我运行代码覆盖时,它们不会被忽略,因此代码覆盖率会报告大量未覆盖的代码.我已经多次尝试使用正则表达式,试图让它正确地选择属性而无济于事.

我很感激有关如何使用的建议: - 让这个属性排除工作 - 一个不需要我排除整个项目或使runsettings文件非泛型的替代方法(我们想重新使用这个基本文件在没有特定编辑的所有项目中)

仅供参考 - 虽然我了解其他代码覆盖工具,但我的目标是使Visual Studio工作,因此在这种情况下,关于切换到其他工具的建议对我没有帮助.

unit-testing mstest code-coverage visual-studio-2012 visual-studio-test-runner

12
推荐指数
3
解决办法
9742
查看次数

是否有项目范围内的等同于 ExcludeFromCodeCoverage 属性?

我有一些以下形式的测试方法:

[ExpectedException(typeof(MyException))]
public void Method() {
  SUT.DoSomethingThatRaisesMyException();
}
Run Code Online (Sandbox Code Playgroud)

在我的测试项目中。然而,当我打开代码覆盖率时,我注意到单元测试项目的覆盖率低于 100%。这似乎是因为代码覆盖工具永远看不到 Method() 的右大括号 - 它总是在到达那里之前发生异常。

我可以将 [ExcludeFromCodeCoverage] 属性添加到每个测试方法中,但这似乎太笨重了。有没有办法排除整个项目?或者有没有办法自动排除每个测试项目。

c# visual-studio-2012

5
推荐指数
0
解决办法
964
查看次数

从 Visual Studio Team Services 中的代码覆盖范围中排除程序集

我有一个在 Visual Studio Team Services(以前称为 Visual Studio Online)上运行的构建。我想从代码覆盖率计算中排除一些程序集。基于我 许多 来源阅读的格式。我创建了一个 .runsettings 文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <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>*AWSSDK*</ModulePath>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)

但这会产生以下错误:

正在开始测试执行,请稍候...错误:System.InvalidOperationException:无法在流程流上混合同步和异步操作。在System.Diagnostics.Process.get_StandardError()在Microsoft.VisualStudio.Coverage.Vanguard.Wait()在Microsoft.VisualStudio.Coverage.Vanguard.Start(字符串outputName,DataCollectionContext上下文)在Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollectorImpl.StartVanguard( DataCollectionContext 上下文)位于 Microsoft.VisualStudio.Coverage.UnitTestDataCollector.SessionStart(对象发送者,SessionStartEventArgs e)位于 Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector.SessionStart(对象发送者,SessionStartEventArgs e)位于 System.EventHandler`1.Invoke(对象发送者,TEventArgs) e) 在 WEX.TestExecution.TaefDataCollectionEvents.OnSessionStart(SessionStartEventArgs e) 在 WEX.TestExecution.DataCollectorTestMode.Initialize(ITestModeSettings settings, ICallbackRegistrar callbackRegistrar) 信息:此外,如果安装了测试发现器和执行器,您可以尝试指定“/UseVsixExtensions”命令在计算机上作为 vsix 扩展,并且您的安装支持 vsix 扩展。示例:vstest.console.exe myTests.dll /UseVsixExtensions:true VSTest 测试运行失败,退出代码:1

是的,一些测试正在使用 async/await。相同的 .runsettings 文件在 Visual Studio 2015 中工作正常。如果我按照建议操作并添加以下选项:/UseVsixExtensions:true,结果是相同的。我怎样才能解决这个问题?

code-coverage azure-devops

1
推荐指数
1
解决办法
2729
查看次数