unit-testing - VSTS / VSTest 不遵守 [ExcludeFromCodeCoverage]
问题描述
我最近刚刚开始使用 VSTS 的持续集成,并且我已经建立了一个包含“Visual Studio 测试”任务的管道。
在任务中,有一个选项可以在测试中执行代码覆盖率扫描。
为了确保我的代码覆盖范围仅涵盖我的代码并且 a) 创建了一个.RunSettings
文件以仅包含我生成的程序集 b) 代码的某些部分具有该[ExcludeFromCodeCoverage]
属性。
现在,当Analyze Code Coverage
从 Visual Studio(2017 Enterprise,15.7.4)执行时,一切正常,只有我的程序集被分析,并且我排除的代码被排除在外。
但是,在运行 VSTS 管道时,不会应用此类限制,并且会测试所有程序集和所有代码,包括明确排除的代码,这会导致代码覆盖率百分比急剧下降。
不知道从哪里开始,所以希望 S/O 社区可以提供帮助。
更新- 正在使用的 RunSettings 文件
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Configurations for data collectors -->
<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>
<Include>
<ModulePath>.*\.dll$</ModulePath>
</Include>
<Exclude>
<ModulePath>.*Tests.dll$</ModulePath>
<ModulePath>.*moq.dll$</ModulePath>
</Exclude>
</ModulePaths>
<UseVerifiableInstrumentation>False</UseVerifiableInstrumentation>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
解决方案
这里有个问题:RunSettings file not used in TFS VsTest task,你可以去看看关于这个问题的讨论。
作为一种解决方法,您可以使用以下 .RunSettings 格式(添加UseVerifiableInstrumentation = False
)
<?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>
<UseVerifiableInstrumentation>False</UseVerifiableInstrumentation>
<ModulePaths>
<Include>
<ModulePath>.*\\MyProjectName.*\.dll$</ModulePath>
</Include>
<Exclude>
<ModulePath>.*Tests.dll$</ModulePath>
</Exclude>
</ModulePaths>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
只需检查acesiddhu 的解释:
您正在定义中使用 Visual Studio 测试工具安装程序任务。如果使用该任务,则需要将 useverifiable 属性设置为 false,因为在 xcopy 模式下,我们不会 GAC 上面的 dll 'Microsoft.VisualStudio.CodeCoverage.Shim(这是一个依赖项,当 useverifiable 设置为 true 时需要加载)
将此属性标记为 false 可确保它不使用此特定 dll。
推荐阅读
- python - 为在子进程中运行的 python 功能测试运行假 redis
- javascript - 如何为同时更改文本的多个元素创建 javascript 显示/隐藏切换?
- java - 如何在 Spring-Kafka 中使用 Avro 序列化
- python - 没有这样的文件或目录:'results.txt'
- javascript - 如何在 Google Map api 中使用文本和数字过滤参数
- php - 如果电子邮件不是有效电子邮件,如何删除用户
- javascript - 使用 jQuery,无法将点击行为添加到使用 innerHTML 创建的按钮
- javascript - 枚举返回的 api 数据的索引
- java - 如何修复未连接适配器;在android pie中跳过布局
- python-3.x - Pyinstaller adddata query