如何在DocTest中使用ByteStrings和QuickTest?

时间:2013-04-09 09:30:46

标签: haskell doctest quickcheck

如何在使用doctest和quickcheck时定义Arbitrary实例(如所述here)?

Doctest和Cabal按照here所述设置,并有一个单独的测试目录。

doctest行看起来像这样:

-- prop> (\s -> (decode . encode $ s == s)) :: ByteString -> Bool
decode :: ByteString -> ByteString
encode :: ByteString -> ByteString

我在哪里以及如何定义Arbitrary实例,以便doctest可以找到它? 请注意,我想在测试项目中定义它。

1 个答案:

答案 0 :(得分:3)

尝试

-- $setup
-- >>> import Control.Applicative
-- >>> import qualified Data.ByteString as ByteString
-- >>> import Test.QuickCheck
-- >>> instance Arbitrary ByteString where arbitrary = ByteString.pack <$> arbitrary
-- >>> instance CoArbitrary ByteString where coarbitrary = coarbitrary . ByteString.unpack

-- |
-- prop> \ s -> (decode . encode) s == s
decode:: ByteString -> ByteString
encode :: ByteString -> ByteString

命名块可用于此类定义。但是,每个完整的定义必须在一行上,doctest将报告每次使用>>>作为成功或失败 - 因此在这种情况下,将报告6次尝试,即使其中只有1次实际是测试