2013-04-09 18 views
1

如何在使用doctest和quickcheck時定義Arbitrary實例(如所述here)?如何在DocTest中使用帶QuickTest的ByteStrings?

Doctest和Cabal按照here的描述進行設置,具有單獨的測試目錄。

的文檔測試線看起來是這樣的:

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

在哪裏,我怎麼定義Arbitrary實例,以便文檔測試可以找到它? 請注意,我想在測試項目中定義它。

回答

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次實際上是測試。

+0

問題是我不一定要在主項目上使用quickcheck依賴項。 – fho 2013-04-09 15:27:00

+1

'QuickCheck'依賴只應該在測試套件中。 – ScootyPuff 2013-04-09 15:42:37

+0

啊......我忽略了頂部的'$ setup'。這工作正常,謝謝! – fho 2013-04-09 17:38:01

相關問題