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