Pex:如何获取所有路径条件(PC)?

Pex: How to obtain all Path Conditions (PC)?

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

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

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”?

谢谢! :)

>> 为什么我没有得到 "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. 在你的方法上做一个"Run IntelliTest"。
  2. Select 探索结果中的所有测试 window,然后点击保存按钮。请注意,将创建一个新的测试项目。
  3. 在此测试项目中找到 PUT – 它将是具有 PexMethod 属性的方法。
  4. 条件 IntelliTest 通过更新 PexMethod 属性来生成更多 PC 并发出测试,如下所示: [PexMethod(TestEmissionFilter = Microsoft.Pex.Framework.Settings.PexTestEmissionFilter.All)]
  5. 现在在 PUT 或乘积方法上再次执行 "Run IntelliTest",您应该会看到其他 PC("duplicate path" 作为摘要消息)。根据您的喜好尝试 EmissionFilter 设置。