Specs2可以将序列元素与现有匹配器之一进行比较吗?

时间:2018-02-23 11:53:41

标签: scala specs2

我想在specs2测试中比较2个双精度序列,类似于:

actualValues must containTheSameElementsAs(expectedValues, _ beCloseTo _)

我可以编写像

这样的手动比较
actualValues must containTheSameElementsAs(expectedValues, (a, b) => math.abs(a - b) < 0.001)

但是这似乎有点无意义,因为beCloseTo已经可用。

更广泛地说,Specs2有很好的文档来源吗?我查看了the user guide,但是对于“containsAllOf”的搜索没有显示任何结果,并且匹配器部分没有任何关于集合的条目,据我所知。

1 个答案:

答案 0 :(得分:1)

大多数收集匹配应该用contain +组合子表达。在这种情况下,您可以写

List(1.3, 1.7) must contain(beCloseTo(1.5 +/- 0.5)).forall

其中forall测试每个元素。如果您想测试只有一个元素满足您的属性,则可以将forall替换为atLeastOnce

如果你想在你的陈述中尽快出现“forall”这个词,你也可以这样写它

forall(List(1.0, 2.0)) { n =>
  n must beCloseTo(1.5 +/- 0.5)
}

这来自混合到MatcherImplicits的{​​{1}}特征,但我同意,这没有详细记录。