2016-11-01 4 views
0

Я использую файл .runsettings, чтобы исключить некоторый код из охвата кода, но он не исключает их из охвата кода, так как проценты покрытия кода не меняются вообще. Ошибок нет.Исключить класс из покрытия кода - .runsettings

код:

<CodeCoverage> 
    <ModulePaths> 
     <Include> 
     <ModulePath>.*\.dll$</ModulePath> 
     </Include> 
     <Exclude> 
     <ModulePath>.*\.test.dll</ModulePath> 
     <ModulePath>.*\.csv.dll</ModulePath> 
     </Exclude> 
    </ModulePaths> 
    <Functions> 
     <Exclude> 
      <!-- CORE --> 
      <Function>xxx.DI.Mobile.Core.ViewModels.HomeAndContents.xxx</Function> 
      <Function>xxx.DI.Mobile.Core.ViewModels.Components.xxxx</Function> 
      <Function>xxx.DI.Mobile.Core.ViewModels.Components.xxx</Function> 

      <!-- xxx --> 
      <Function>^xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.xxx\.xxx$</Function> 
      <Function>^xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.xxx\.xxx$</Function> 
      <Function>.*\.xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.xxx\.xxx$</Function> 
      <Function>.*xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.Dashboard\.xxx$</Function> 
     </Exclude> 
    </Functions> 
    <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation> 
    <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses> 
    <CollectFromChildProcesses>True</CollectFromChildProcesses> 
    <CollectAspDotNet>False</CollectAspDotNet> 
    </CodeCoverage> 

Название длинного класса является только DOT обозначения полного пути каждого класса. Он говорит, чтобы использовать \. для разграничения пространств имен.

Пример одного из моих классов:

namespace xxx.DI.Mobile.Core.State.ViewModels.xxx 
{ 
    public class xxx : yyy 
    { 

то, что идет в функции тега, как так:

<Function>xxx.DI.Mobile.Core.State.ViewModels.xxx.xxx</Function> 

Попытка эти регулярные выражения в своих функциональных тегов, но ни один из них работал еще :

<Function>^xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.Vehicle\.xxx$</Function> 
        <Function>^xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.Vehicle\.xxx$</Function> 
        <Function>.*\.xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.Policies\.xxx$</Function> 
        <Function>.*xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.Dashboard\.xxx$</Function> 
        <Function>xxx\.DI\.Mobile\.Core\.xxx\.ViewModels\.Common\.xxx</Function> 

Почему это не исключает какой-либо из моих кодов от покрытия кода?

ответ

1

Тег <Function> исключает функции. Поэтому, чтобы исключить весь класс, просто добавьте \..* в конец класса, где \. означает, что точка и .* означает что-либо.Например, все функции класса. Пример:

<Function>xxx.xxx.Mobile.Core.xxx.ViewModels.Vehicle.xxx\..*</Function>

Даже если точка предназначается, чтобы быть \., имея лишь . между моими именами папок, как указано выше работает независимо.

0

Моя догадка не в состоянии интерпретировать <function> блок в exclude, может быть попытка дать регулярное выражение.

пожалуйста, попробуйте ниже:

<Function>^xxx\.DI\.Mobile\.Core\.State\.ViewModels\.Common\.GetAQuoteViewModel$</Function> 

или

<Function>.*\\.DI\.Mobile\.Core\.State\.ViewModels\.Common\.GetAQuoteViewModel$</Function> 

И более того, первые два исключает интерпретируются как

anystring.test.dll

и

anystring.csv.dll

Надеется, что вы хорошо с этим.

Я думаю, что вы уже знаете правило, специфичное для этих настроек покрытия кода.

Но нижеприведенный список.

. * Соответствует строке любых символов

. соответствует точке "."

() соответствует круглые скобки "()"

\ соответствует путь к файлу разделитель "\"

^соответствует началу строки

$ соответствует концу строки