簡體   English   中英

如何改進QuickCheck和Parsec調試?

[英]How do I improve QuickCheck and Parsec debugging?

我正在使用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, ... }

我的一個屬性可能會在解析任意String后檢查以確定mNumV == fNumV 這很有效 - 當它工作時。

但如果出現問題,Parsec會拋出類似於的錯誤:

*** Failed (after 1 test):
Exception:
  (line 302, column 3):
  unexpected "\n"
  expecting space

這很有用 - 但是,在測試失敗后,任意文件的內容都會消失。 我不能進去參考302行。

我能看到的唯一選擇是在每次測試后打印每個任意文件的fContents - 但這似乎是一個糟糕的主意。 將每個任意文件路由到磁盤上的文件以供以后參考也是如此。

這有什么共同的方法嗎?

您可以使用whenFail在失敗時打印有問題的字符串(或將其轉儲到文件中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM