【问题标题】:Exclude class from code coverage - .runsettings从代码覆盖范围中排除类 - .runsettings
【发布时间】:2016-11-01 20:58:54
【问题描述】:

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

长类名只是每个类的完整路径的点符号。它说使用\. 来分隔命名空间。

我的一个类的一个例子是:

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>

为什么它没有将我的任何代码排除在代码覆盖范围之外?

【问题讨论】:

    标签: c# .net code-coverage


    【解决方案1】:

    &lt;Function&gt; 标签不包括函数。所以要排除整个班级,只需在班级末尾添加\..* - 其中\. 表示点,.* 表示任何内容。例如类的所有功能。示例:

    &lt;Function&gt;xxx.xxx.Mobile.Core.xxx.ViewModels.Vehicle.xxx\..*&lt;/Function&gt;

    尽管 dot 的意思是 \.,但我的文件夹名称之间只有一个 . 无论如何都可以正常工作。

    【讨论】:

      【解决方案2】:

      我的猜测是系统无法解释排除中的&lt;function&gt; 块,可以尝试给出正则表达式。

      请尝试以下:

      <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

      希望你能接受。

      我想你已经知道这个规则,特定于这个代码覆盖设置。

      但在下面列出。

      .* 匹配任意字符的字符串

      。匹配一个点“.”

      ( ) 匹配括号“( )”

      \ 匹配文件路径分隔符“\”

      ^ 匹配字符串的开头

      $ 匹配字符串的结尾

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 2021-02-12
        • 2016-03-21
        • 2016-03-29
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多