使用基于属性的测试工具生成事件/命令?

时间:2016-03-08 18:25:24

标签: quickcheck scalacheck fscheck property-based-testing

据我了解,大多数房产测试工具都在功能层面运作。给定一组参数,这些工具将针对某些不变量生成随机输入和测试输出。

我已经读过ScalaCheck现在开始包含生成事件以测试statefull系统。但是,我无法找到有关它的大量信息。这在* check生态系统的其余部分也变得流行(fscheck,quickcheck,其他变种)?

1 个答案:

答案 0 :(得分:1)

根据我的知识,你所谓的“一代事件”源于Koen Claessen和John Hughes的“使用QuickCheck测试Monadic代码”。他们提供的示例是测试队列。使用的方法总是类似的 - 正如评论所说,因为“基本”快速检查(我将使用小写快速检查来描述各种平台上的QuickCheck端口系列)假设它生成不可变数据,乍一看它不容易使用快速检查以测试一个有效的,有状态的系统。

直到您意识到有状态系统通过执行一系列状态转换(这些被称为命令,操作,事件等)而达到某种状态。并且这个序列可以完美地表示为不可变转换的不可变列表!通常,每个转换都在被测实际系统上执行,并在其状态模型上执行。然后在每次转换后,将模型状态与实际状态进行比较。

要了解Quvik QuickCheck(适用于Erlang)的效果,您可以阅读Thomas Arts,John Hughes,Joakim Johansson和Ulf Wiger撰写的“使用Quviq QuickCheck测试电信软件”。

我相信大多数quickcheck,包括QuickCheck本身,都有一个基本快速检查功能的层,允许您生成一系列状态转换,通常使用状态机,如前后条件等方法。

我认为这不是特别新,但可能有点不太重视。

例如,FsCheck已经有model based testing多年(dislosure:我是FsCheck的主要contirbutor)。我认为ScalaCheck也是如此。 Quvik QuickCheck可能是最先进的实现(当然还有最先进的应用程序)。