从代码覆盖范围中排除类 - .runsettings

时间:2016-11-01 20:58:54

标签: c# .net code-coverage

我使用.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>

为什么不从代码覆盖中排除我的任何代码?

2 个答案:

答案 0 :(得分:2)

<Function>标记排除了功能。因此,要排除整个班级,只需将\..*添加到班级的末尾 - 其中\.表示点,.*表示任何内容。例如,班级的所有功能。例如:

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

尽管dot应该是\.,但我的文件夹名称之间只有.无论如何都在工作。

答案 1 :(得分:0)

我的猜测是系统无法解释排除中的<function>阻止,可能会尝试给出正则表达式。

请在下面尝试:

<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

希望你没事。

我认为您已经知道该规则,特定于此代码覆盖率设置。

但在下面列出。

。*匹配任何字符的字符串

。匹配一个点&#34;。&#34;

()匹配括号&#34;()&#34;

\匹配文件路径分隔符&#34; \&#34;

^匹配字符串的开头

$匹配字符串的结尾