Specs2 能否将序列元素与现有匹配器之一进行比较?

Can Specs2 compare sequence elements with one of the existing matchers?

我想在 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" 没有显示任何结果,据我所知,匹配器部分没有任何关于集合的条目。

大多数集合匹配应该可以用 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)
}

这来自混入 SpecificationMatcherImplicits 特征,但我同意,这不是 well-documented。