[英]How to test an abstract data type?
假設我們有一個定義抽象類型T的模塊:
module AbstractType (T, lexer) where
data T = T String deriving Show
lexer = (fmap T) . words
(請注意,我們不會為T導出任何類型構造函數,因此用戶將無法手動草擬實例。)
一個單元如何測試lexer
功能?
當然我們可以使用T的Show屬性,如下所示:
module Main where
import AbstractType
main = test
(show $ lexer "summer is miles and miles away")
"[T \"summer\",T \"is\",T \"miles\",T \"and\",T \"miles\",T \"away\"]"
test :: (Eq a) => a -> a -> IO ()
test expression expectation
| expression == expectation = putStrLn "Test passed."
| otherwise = error "Test failed."
- 但是當我們的抽象類型不是允許轉換為另一個可構造類型的類的實例時,這既不美觀又不適合。
有補救措施嗎?
PS為案例提供一些理由:假設我們有一系列函數,如parser . lexer
parser . lexer
我們可以進行集成測試,看看它是否全部有效。 由於手頭的鏈條變得更加復雜,因此可能需要單獨對每個鏈路進行單元測試。
該示例是我正在編寫的實際玩具文本處理器的簡化摘錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.