Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing VSTS/VSTest不符合[ExcludeFromCodeOverage]_Unit Testing_Continuous Integration_Azure Devops - Fatal编程技术网

Unit testing VSTS/VSTest不符合[ExcludeFromCodeOverage]

Unit testing VSTS/VSTest不符合[ExcludeFromCodeOverage],unit-testing,continuous-integration,azure-devops,Unit Testing,Continuous Integration,Azure Devops,我最近刚刚开始使用与VST的持续集成,我已经建立了一个管道,其中包括“VisualStudio测试”任务 在任务中,有一个选项可以作为测试的一部分执行代码覆盖率扫描 为确保我的代码覆盖范围仅覆盖我的代码,请a)创建一个.RunSettings文件以仅包括我生成的程序集,b)代码的某些部分具有[ExcludeFromCodeCoverage]属性 现在,当从Visual Studio(2017 Enterprise,15.7.4)执行Analyze code Coverage时,一切都如我所期望的

我最近刚刚开始使用与VST的持续集成,我已经建立了一个管道,其中包括“VisualStudio测试”任务

在任务中,有一个选项可以作为测试的一部分执行代码覆盖率扫描

为确保我的代码覆盖范围仅覆盖我的代码,请a)创建一个
.RunSettings
文件以仅包括我生成的程序集,b)代码的某些部分具有
[ExcludeFromCodeCoverage]
属性

现在,当从Visual Studio(2017 Enterprise,15.7.4)执行
Analyze code Coverage
时,一切都如我所期望的那样工作,只有我的程序集得到了分析,我排除的代码被排除了

但是,当VSTS管道运行时,不会应用此类限制,并且会测试所有程序集和所有代码,包括专门排除的代码,这会导致代码覆盖率显著降低%age

我不知道该怎么办,希望S/O社区能提供帮助

更新-正在使用运行设置文件

<?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>

.\.dll$
*Tests.dll$
*moq.dll$
假的
这里有一个问题:,你可以去查看关于这个问题的讨论

作为一种解决方法,您可以使用以下.RunSettings格式(添加
UseVerifiableInstrumentation=False


假的
.*\\MyProjectName.\.dll$
*Tests.dll$
只需查看acesiddhu的解释:

您正在您的系统中使用visual studio测试工具安装程序任务 定义。在使用该任务的情况下,需要使用可验证属性 设置为false,因为在xcopy模式下,我们不GAC上面的dll 'Microsoft.VisualStudio.CodeCoverage.Shim(这是一个依赖项 当useverifiable设置为true时需要加载)

将此属性标记为false可确保它不使用此特定属性 dll


好。。我现在已经有了Visual Studio和VSTS CI过程来生成匹配的结果,但仍然存在一些问题。。1.它们仍然包括
[ExcludeFromCodeCoverage]
代码和2。在代码覆盖率的CI生成摘要中,%ag似乎包含来自排除程序集的数据,因此会删除该值。。摘要显示为9.30%,而实际输出显示为14.65%。有趣的是,如果我在Visual Studio中运行代码覆盖率并取消勾选使用RunSettings文件的选项,那么[ExcludeFromCodeOverage]实际上被排除在外,并将%ag添加到main中的RunSettings增加到17%question@ChrisHammond检查此线程是否有帮助:是的。。。就是那个。。。虽然摘要页面上的%ag与实际测试结果不同。。。谢谢你的帮助,安迪。
<?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>