如何在使用doctest和quickcheck时定义Arbitrary
实例(如所述here)?
Doctest和Cabal按照here所述设置,并有一个单独的测试目录。
doctest行看起来像这样:
-- prop> (\s -> (decode . encode $ s == s)) :: ByteString -> Bool
decode :: ByteString -> ByteString
encode :: ByteString -> ByteString
我在哪里以及如何定义Arbitrary
实例,以便doctest可以找到它?
请注意,我想在测试项目中定义它。
答案 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次实际是测试