目前,我正在评估 Microsoft Research 的 Spec Explorer 2010。我有点想知道测试用例是如何生成的。
我正在玩 SE 生成的测试样本模型(累加器)。有一个方法 Accumulator.Add 将自然数 > 0 添加到成员变量中。
该模型指定:
[Rule(Action = "Add(x)")]
static void AddRule(int x)
{
Condition.IsTrue(x > 0);
accumulator += x;
}
如您所见,上述条件 (x > 0) 已在模型代码中指定。此外,我在 CORD 文件中为 Accumulator.Add 指定了可能的输入:
config ParameterCombination: Main
{
action abstract static void Accumulator.Add(int x)
where x in {-3..3};
}
但是语句 Condition.IsTrue(x > 0) 强制 SpecExplorer 仅生成值 > 0 的测试。这不是我所期望的:输入参数类型是 int,因此可以将非正数传递给方法。根据规范,该方法不应该允许这样的数字。从我的角度来看,SE 应该使用非正输入生成测试,以验证算法不接受它们。
这种行为可以以某种方式建模吗?请不要将我指向 PEX 之类的解决方案,因为 PEX 专用于白盒测试。SE 更侧重于黑盒测试,根据我所学到的,黑盒测试应该使用基于我的规范的等价类。那些将是:
Equivalence class 1: Positive input
Equivalence class 2: Non-positive input
但 SE 从不为后一种情况生成测试用例。
有什么建议么?先感谢您。