Haskell:如何用quickcheck测试(反应式)FSM?
我为当前正在工作的一个小型足球游戏写了一个有限状态机模块。 它提供了一个设置FSM的接口(基本上是它的状态和转换)。 对于每个状态,您可以提供在入口和出口时或FSM保持相同状态时触发的函数,然后这些函数返回一些消息。 它还提供了一个响应式接口(Yampa),可以产生随时间变化的状态并收集随时间发生的消息。 代码在这里是Data / FSM.hs。
我正在寻找一个很好的方法来测试这个模块。 既然它是纯粹的,我想快速检查一下。 我没有经验quickcheck,所以任何提示将不胜感激! 到目前为止,我的基本理解是:可以提供一些或多或少随机构建FSM的函数,然后对它们运行一些(或多或少是随机的)转换。 但我不太明白如何以这种方式建立测试...
首先,QuickCheck可以说是最适合验证广泛的一般属性。 给定某种类型的任意数据,执行一些操作,然后使用谓词来确保结果具有与输入有关的某些属性。 涉及分步行为的精确细节的事情在这种风格中可能不会起作用,并且您不应该觉得有责任在QuickCheck中做所有事情!
这就是说,基于你在评论中给出的更复杂的例子,你是否考虑过简单地产生预期产出以及FSM和投入? 如果您可以通过构建生成您所知道的正确结果,则可以在输入上运行FSM,并将实际结果与构建版本进行比较。
如果您避免将QuickCheck属性视为在某些输入上测试函数,而是要检查一个或多个值是否满足用被测函数表示的谓词,则可能会有所帮助。 这些值的集合(可能包括多个输入,输出,无论什么是必需的)是QuickCheck随机生成的。
链接地址: http://www.djcxy.com/p/56737.html