【发布时间】:2017-07-09 20:13:16
【问题描述】:
我创建了一个库来创建“类似列表”的序列,其中实现了许多 Prelude 风格的函数。我想为此编写一些测试用例,以确保我的库产生正确的输出,我认为最简单的方法是编写一些函数,将结果转换为列表并将它们与 Prelude 结果进行比较。假设我们有这个:
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 不输出列表,它输出它自己的数据类型。
上面的工作正常,但请注意我是如何“重复自己”的(TM)。我必须确保左侧和右侧相同,否则我的测试用例是错误的。
有没有一种很好的方法来编写这样的测试用例,这样我就不必重复自己了?
【问题讨论】:
-
当您的测试定义为“重复自身”以比较两种机制时,我认为您并不是真正“重复自己”。
-
理想情况下,所有测试都采用一个参数来确定使用哪个函数,所以我可以有一个
doTest函数,类似于doTest test = test True == toList (test False)或类似的东西,但我还没有找到方法在没有类型检查器讨厌我的情况下做到这一点。 -
@Clinton:我认为如果不实例化一个常见的
class或者可能使用模板 haskell(我没有经验),你就无法实现这一目标
标签: unit-testing haskell testing