Visual studio 2017 在VSTS生成任务期间生成Runsettings配置文件;Visual Studio测试“;

Visual studio 2017 在VSTS生成任务期间生成Runsettings配置文件;Visual Studio测试“;,visual-studio-2017,azure-devops,azure-pipelines,azure-pipelines-build-task,runsettings,Visual Studio 2017,Azure Devops,Azure Pipelines,Azure Pipelines Build Task,Runsettings,首先,我的主要问题是在visual Studio 2017和VSTS(Azure开发运营商)构建管道任务“visual Studio测试”之间看到不同的代码覆盖率输出 在分析visual Studio中的代码覆盖率时,我使用2017,在解决方案的测试过程中,它似乎在动态创建临时runsettings配置文件,并在调用vstest.console.exe进程时使用它 visual Studio正在分析我们的解决方案,并创建特定配置,以过滤掉生成的代码覆盖率报告中包含的依赖项DLL。因此,在Visu

首先,我的主要问题是在visual Studio 2017和VSTS(Azure开发运营商)构建管道任务“visual Studio测试”之间看到不同的代码覆盖率输出

在分析visual Studio中的代码覆盖率时,我使用2017,在解决方案的测试过程中,它似乎在动态创建临时runsettings配置文件,并在调用vstest.console.exe进程时使用它

visual Studio正在分析我们的解决方案,并创建特定配置,以过滤掉生成的代码覆盖率报告中包含的依赖项DLL。因此,在VisualStudio中,如果我查看输出窗口中的测试,我将看到生成的temp runsettings文件

<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector uri="datacollector://microsoft/unittestisolation/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.UnitTestIsolationDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="UnitTestIsolation">
    <Configuration>
    </Configuration>
  </DataCollector>
  <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector">
    <Configuration>
      <CoverageFileName>Coverage 2019-06-11 14_30_31.coverage</CoverageFileName>
      <CodeCoverage>
        <ModulePaths>
          <Exclude>
            <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
          </Exclude>
          <Include>
            <ModulePath>.*\\<MyNamespace>\.API\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.ACL\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Services\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.API\.Contracts\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Services\.Contracts\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.ACL\.Contracts\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Services\.UnitTests\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.ACL\.UnitTests\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.PaymentSystem\.Util\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.MerchantContracts\.Clover\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.UnitTests\.Data\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Data\.EF\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Domain\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Domain\.UnitTests\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Core\.NuGetResources\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.MerchantContracts\.Mercury\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Processor\.exe</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Processor\.Testing\.exe</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.Processor\.UnitTests\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.MerchantContracts\.Mindbody\.dll</ModulePath>
            <ModulePath>.*\\<MyNamespace>\.API\.UnitTests\.dll</ModulePath>
          </Include>
        </ModulePaths>
    ... etc
</RunSettings>
现在在VSTS中,没有任何runsettings配置的“Visual Studio测试”任务包括上面列出的其他第三方DLL。与Visual Studio 2017不同,它不会动态创建runsettings配置来过滤它们。相反,我必须手动创建一个runsettings配置,并将其包含在repo中,以便在构建管道任务中使用

这里的主要问题是可维护性。从长远来看,我不想亲自管理这个文件,必须记住每次添加另一个需要拉取的项目时都要更新它。我可以使模块路径更通用,以便它根据dll名称的一部分来提取dll

<ModulePath>.*\\<MyNamespace>.*\.dll</ModulePath>
*\.*.dll
这仍然留有出错的余地。在我看来,当visual Studio在后台自动执行此操作时,我需要手动配置它,这似乎很愚蠢

我希望有人知道如何使用与visual Studio相同的过程在VST中生成代码覆盖率,以便visual Studio使用解决方案中的项目创建runsettings配置,以过滤掉不需要的dll测试

<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>
                </CodeCoverage>
            </Configuration>
        </DataCollector>
    </DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
fluentassertions.core.dll
fluentassertions.dll
moq.dll
nunit3.testadapter.dll
<ModulePath>.*\\<MyNamespace>.*\.dll</ModulePath>