[英]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.