我制作了一个创建“list like”序列的库,其中实现了许多Prelude样式函数。我想为此编写一些测试用例,以确保我的库生成正确的输出,并且我认为最简单的方法是编写一些函数,将结果转换为列表并将它们与Prelude结果进行比较。比方说,我们已经有了这样的:在Haskell中为不同类型编写测试用例
import qualified MyLibrary as ML
import qualified Prelude as P
例如我可能要在以下测试用例:
P.take 5 (P.enumFrom 1) == toList (ML.take 5 (ML.enumFrom 1))
注意ML.enumFrom
不输出列表,它输出它自己的数据类型。
上述工作正常,但请注意我是如何“重复自己”(商标)。我必须确保左侧和右侧是相同的,否则我的测试用例是错误的。
有没有一种很好的方式来编写像这样的测试用例,所以我不必重复自己?
当你的测试被定义为“重复自己”以便比较两种机制时,我不认为你真的“重复自己”。 –
理想情况下,所有的测试都需要一个参数来决定使用哪个函数,这样我就可以拥有一个'doTest'函数,就像'doTest test = test True == toList(test False)'或类似的东西,但我没有' t找到了一种方式来做到这一点,而不会让类型分析者恨我。 – Clinton
@Clinton:我认为如果没有实例化一个普通的'class'或可能使用模板haskell(我没有经验),你无法实现 – jakubdaniel