例如,Reducio(用于 Java/Scala)和QuickCheck(用于 Haskell)。我正在考虑的那种框架将为内置数据类型提供“生成器”,并允许程序员定义新的生成器。然后,程序员将定义一个断言某些属性的测试方法,将适当类型的变量作为参数。然后,该框架为参数生成一堆随机数据,并对该方法运行数百次测试。
例如,如果我实现了一个 Vector 类,并且它有一个 add() 方法,我可能想检查我的加法是否通勤。所以我会写一些类似的东西(用伪代码):
boolean testAddCommutes(Vector v1, Vector v2) {
return v1.add(v2).equals(v2.add(v1));
}
我可以在两个特定向量上运行 testAddCommutes() 以查看该添加是否通勤。但是我没有编写一些 testAddCommutes 调用,而是编写了一个生成任意向量的过程。鉴于此,框架可以在数百个不同的输入上运行 testAddCommutes。
这会为任何人敲响警钟吗?