Почему покрытие кода в файле пользовательских настроек выполнения возвращает исключенные пути - PullRequest
0 голосов
/ 08 октября 2019

В Azure Devops я использовал настраиваемые параметры запуска с фильтром, чтобы соответствовать всем сборкам, которые содержат текст Xpand.XAF.Modules. Однако результаты, которые я получаю, включают пути, которые я отфильтровал.

Вот мой файл runsettings

Updated Run Settings:
<!-- File name extension must be .runsettings -->
<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>
              <Include>
                <ModulePath>.*Xpand.XAF.Modules.*\.dll$</ModulePath>
              </Include>
              <Exclude>
                <ModulePath>.*Tests.dll</ModulePath>
                <ModulePath>.*Hub.*</ModulePath>
              </Exclude>
            </ModulePaths>
            <Functions>
              <Exclude>
                <!-- Exclude methods in a class or namespace named UnitTest: -->
                <Function>.*\.Source\..*</Function>
              </Exclude>
            </Functions>
            <!-- We recommend you do not change the following values: -->
            <!-- Set this to True to collect coverage information for functions marked with the "SecuritySafeCritical" attribute. Instead of writing directly into a memory location from such functions, code coverage inserts a probe that redirects to another function, which in turns writes into memory. -->
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
            <!-- When set to True, collects coverage information from child processes that are launched with low-level ACLs, for example, UWP apps. -->
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
            <!-- When set to True, collects coverage information from child processes that are launched by test or production code. -->
            <CollectFromChildProcesses>True</CollectFromChildProcesses>
            <!-- When set to True, restarts the IIS process and collects coverage information from it. -->
            <CollectAspDotNet>False</CollectAspDotNet>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
      <DataCollector friendlyName="blame" enabled="True" />
    </DataCollectors>
  </DataCollectionRunSettings>
  <RunConfiguration>
    <BatchSize>1000</BatchSize>
    <ResultsDirectory>d:\a\_temp\TestResults</ResultsDirectory>
  </RunConfiguration>
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="blame" enabled="True" />
    </Loggers>
  </LoggerRunSettings>
</RunSettings>

и результаты, которые я получаю там, где есть записи, такие как xunit, nunit и т. Д.

+       nunit3.testadapter.dll  1253    52.10%  1152    47.90%
+       system.interactive.dll  1233    95.43%  59  4.57%
+       system.reactive.dll 40510   91.69%  3671    8.31%
+       testslib.dll    55  12.56%  383 87.44%
+       xpand.source.extensions.dll 82  64.06%  46  35.94%
+       xpand.xaf.modules.autocommit.dll    37  32.74%  76  67.26%
+       xpand.xaf.modules.clonemembervalue.dll  12  7.06%   158 92.94%
+       xpand.xaf.modules.clonemodelview.dll    31  32.98%  63  67.02%
+       xpand.xaf.modules.gridlisteditor.dll    3   3.13%   93  96.88%

Решение

Хотя принятый ответ не был точным решением, я дал понять, что более агрессивная фильтрация может работать, поэтому я изменил свой файл runsettings, добавив явные выходы фильтрации длялишние сборки и работали.

<ModulePaths>
  <Include>
    <ModulePath>.*Xpand\.XAF\.Modules.*\.dll$</ModulePath>
  </Include>
  <Exclude>
    <ModulePath>.*Tests\.dll</ModulePath>
    <ModulePath>.*Hub.*</ModulePath>
    <ModulePath>.*system.*</ModulePath>
    <ModulePath>.*xunit.*</ModulePath>
    <ModulePath>.*nunit.*</ModulePath>
    <ModulePath>.*xpand\.source.*</ModulePath>
    <ModulePath>.*testslib.*</ModulePath>

  </Exclude>
</ModulePaths>
<Functions>
  <Exclude>
    <!-- Exclude methods in a class or namespace named UnitTest: -->
    <Function>.*\.Source\..*</Function>
  </Exclude>
</Functions>

1 Ответ

0 голосов
/ 09 октября 2019

Я не могу сказать, что именно не так с вашими исключенными путями, но я знаю, что синтаксис очень хитрый. Например, точки должны быть экранированы косыми чертами, а сопоставление с шаблоном происходит в виде регулярных выражений. У нас есть то же исключение для .Tests.dll файлов, и это работает в нашем случае:

<Exclude>
  <ModulePath>.*Tests\.dll$</ModulePath>
</Exclude>
...