Pex:对于String.IsNullOrEmpty Pex只生成两种测试方法

时间:2011-05-19 07:23:18

标签: pex

我有一个像这样的单一条件的简单方法。

if(String.IsNullOrEmpty(FirstName))

{

success = false;

}

返回成功;

当我运行Pex时,它只生成一个测试用例,它将Null分配给FirstName属性,另一个为“FirstName”分配“\ 0”。

为什么不生成第三个将string.Empty分配给FirstName属性的方法?

3 个答案:

答案 0 :(得分:4)

据我了解,Pex只是试图在您的应用程序代码中实现100%的测试覆盖率。从您发布的代码中,只需要两次测试即可跟踪该方法的所有分支。

  • 字符串不为空或为空。
  • 字符串为空或空。

答案 1 :(得分:2)

我猜测Pex未配置为检查.Net库的内部,因此它不知道空字符串将是IsNullOrEmpty函数的特殊值。如果无法检查字符串的使用方式,Null和空字符('\ 0')是测试字符串的两个最喜欢的选择。

如果需要,您可以创建参数化单元测试以检查空字符串。

答案 2 :(得分:1)

正如Joshua Dale所说,Pex尝试生成涵盖尽可能多的代码分支的测试。正如Pex参考手册第一段所述:

  

给定一种方法, [sic] Microsoft Pex生成输入,这些输入执行许多不同的代码路径。按顺序 [sic] ,Microsoft Pex旨在生成一个可实现最大代码覆盖率的测试套件。

(如您所见,本文档可以进行一些校对!)

考虑到这一点很重要,因此Pex将生成旨在执行所有代码分支的测试输入,而不是生成具有语义值的测试输入(期望通用的地方)。实现这一点非常重要,并且不要假设Pex生成的测试套件意味着您的测试已涵盖所有可能的故障条件。它可能只涵盖其中的极少数 - 测试输入旨在达到边缘情况(例如null / null字符),如果您认为目的是尽可能多地运用代码分支,这是显而易见的。 p>

Pex尝试探索您自己的测试未发现的代码分支。它是对你的智能的补充 - 作为一个人,你善于弄清楚代码应该做什么,作为图灵机,Pex擅长挑选每个可能的代码分支(虽然它经常需要帮助。)