如何改进QuickCheck和Parsec调试?

时间:2014-01-16 07:40:43

标签: haskell parsec quickcheck

我正在使用Haskell和Parsec来解析文件格式。我的解析函数类似于:

parseInput :: String -> Model
parseInput input = ...

data Model = Model { mNumV :: Int, mNumF :: Int, ... }

为了测试这个,我使用的是QuickCheck。我已经定义了一个Arbitrary实例,它生成一个表示格式化文件内容的String

instance Arbitrary File where
    arbitrary = ...

data File = File { fContents :: String, fNumV :: Int, fNumF :: Int, ... }

在解析任意mNumV == fNumV之后,我的某个属性可能会检查以确定String是否为*** Failed (after 1 test): Exception: (line 302, column 3): unexpected "\n" expecting space 。这很有效 - 当它工作时。

但如果出现问题,Parsec会抛出类似于:

的错误
fContents

这很有用 - 但是,在测试失败后,任意文件的内容都会消失。我不能进去参考第302行。

我能看到的唯一选择是在每次测试后打印每个任意文件的{{1}} - 但这似乎是个糟糕的主意。将每个任意文件路由到磁盘上的文件以供以后参考也是如此。

这有什么共同的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以在失败时使用whenFail打印有问题的字符串(或将其转储到文件中)。