【发布时间】:2012-12-07 10:27:19
【问题描述】:
目前,我正在评估 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 从不为后一种情况生成测试用例。
有什么建议吗?提前谢谢你。
【问题讨论】:
标签: c# specifications model-based-testing