【发布时间】:2014-07-05 15:56:29
【问题描述】:
我正在学习 Odersky 的 Coursera Scala 课程,我正在努力为第 2 课中的“过滤器”函数编写单元测试(返回 p 成立的 set 的子集)。我们创建了一个类型别名 Set = Int => Boolean。我设法以令人满意的功能方式编写函数,我可以清楚地看到它工作正常。我声称这是因为我可以将提供的 printSet 函数用于各种应用的预定义集合和谓词,并看到预期的结果出现在控制台中。我知道我们的 Type 别名是在说我们实际上只是在定义一个确定集合成员的规则,而不是集合本身。
我遇到的真正问题是我不擅长编写单元测试,而且我无法想象如何做出断言来测试我的过滤器(s:Set,p:Int => Boolean)函数。
我认为,部分问题在于不知道如何比较两组。试图从字面上断言从“过滤器”返回的子集等于定义的结果,我尝试了这样的事情:
val sampleSet = List(-1, 0, 1).toSet
val odd: Set = x => x % 2 != 0
val sampleResult = List(-1, 1).toSet
assert( filter(sampleSet, odd).equals(sampleResult) ) //nope, doesn't work. Returns false.
assert( filter(sampleSet, odd) == sampleResult ) //no good either
如何简单地比较两组是否包含完全相同的值?我是不是太直白了?我当然感到非常愚蠢。
任何人都可以向我建议一种为此编写单元测试的方法吗?单元测试没有评分,而且我的功能已经正常工作,所以在我看来,这似乎在 Coursera 荣誉代码的范围内。即使是让我头脑清醒的提示也将不胜感激。
【问题讨论】:
标签: scala unit-testing