【问题标题】:Pex: How to obtain all Path Conditions (PC)?Pex:如何获得所有路径条件(PC)?
【发布时间】:2016-12-26 20:49:01
【问题描述】:

是否可以强制 Pex/Intellitest 寻找任何可能的路径条件?我需要 pex 向我展示那些 PC。在 pexfonfun/visualstudio 2015 中,我只能看到几台 PC。例如,不可行的 PC 不显示。

在下一个示例中,我得到 3 台 PC:

1) i != 12 && i != 15;
2) i == 15;
3) i == 12;

public static int foo(int i){
   int a = 1;
   if(i == 12)
      a = 1;
   if(i == 15)
      a = 2;
   return a;
}

为什么我没有得到“i != 12 && i == 15”?

谢谢! :)

【问题讨论】:

    标签: pex intellitest


    【解决方案1】:

    >> 为什么我没有得到“i != 12 && i == 15”?

    IntelliTest 尝试生成具有高覆盖率的紧凑测试套件。 对于您的示例,请注意这 3 台 PC 足以覆盖代码中的所有块。因此,IntelliTest 决定现在可以停止。 以下是 IntelliTest 参考手册中的一些相关部分,进一步解释了这一点:

    1. 要了解 IntelliTest 如何生成数据,请参见此处:https://www.visualstudio.com/en-us/docs/test/developer-testing/intellitest-manual/input-generation
    2. 要查看 IntelliTest 何时决定发出测试用例,请参见此处:https://www.visualstudio.com/en-us/docs/test/developer-testing/intellitest-manual/test-generation

    请告诉我如何改进本手册。

    好的,话虽如此,您也可以让 IntelliTest 生成所有 PC(尽管它不会使用任何新的代码路径)。 以下是如何做到这一点:

    1. 对您的方法执行“运行 IntelliTest”。
    2. 从探索结果窗口中选择所有测试,然后点击保存按钮。请注意,系统会创建一个新的测试项目。
    3. 在此测试项目中找到 PUT - 它将是具有 PexMethod 属性的方法。
    4. 条件 IntelliTest 通过更新PexMethod 属性来生成更多 PC 并发出测试,如下所示: [PexMethod(TestEmissionFilter = Microsoft.Pex.Framework.Settings.PexTestEmissionFilter.All)]
    5. 现在在 PUT 或产品方法上再次执行“运行 IntelliTest”,您应该会看到其他 PC(以“重复路径”作为摘要消息)。根据需要尝试 EmissionFilter 设置。

    【讨论】:

    • 太棒了!非常感谢! :)
    • 我看你对此很了解,你知道为什么 pex 会在 PC 中生成这个表达式吗? return (4294967294u | 1u ^ (var.hasValue ? (byte)1 : (byte)0)) == uint.MaxValue;这发生在“var”作为int的算术运算中?多变的。示例(int? 类型的 var):int? ret = 0; ret += 变量;返回 0;
    • 你能分享完整的方法体吗?我可以看看。
    • 当然!这是pexfonFun中的完整方法准备运行Link
    • 你能看一下吗?谢谢!
    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 2014-12-21
    • 2019-10-22
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    相关资源
    最近更新 更多