我的解决方案是使用名为"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似乎建议我可以.
我正在使用自定义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
我有一些以下形式的测试方法:
[ExpectedException(typeof(MyException))]
public void Method() {
SUT.DoSomethingThatRaisesMyException();
}
Run Code Online (Sandbox Code Playgroud)
在我的测试项目中。然而,当我打开代码覆盖率时,我注意到单元测试项目的覆盖率低于 100%。这似乎是因为代码覆盖工具永远看不到 Method() 的右大括号 - 它总是在到达那里之前发生异常。
我可以将 [ExcludeFromCodeCoverage] 属性添加到每个测试方法中,但这似乎太笨重了。有没有办法排除整个项目?或者有没有办法自动排除每个测试项目。
我有一个在 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,结果是相同的。我怎样才能解决这个问题?