【发布时间】:2013-11-02 12:34:46
【问题描述】:
Specs2 确实提供了一个 containsAllOf 匹配器,但我无法让它按照我想要的方式工作。我有两个字符串 A 和 B,我想测试 B 中出现的所有字符是否都存在于 A 中。
到目前为止我最好的尝试是
A.toCharArray.toSeq must containAllOf(B.toCharArray.toSeq)
但这会失败并出现类似的错误
WrappedArray(a, b, c, d, ...) 不包含 S, a, V, H, I, ... 和 不得包含...
- WrappedArray 确实包含据称根据 Specs2 不包含的字符
- 为什么要对 A 必须不包含的元素进行测试?我不想测试相等性,我想测试 B 是否是 A 的“子集”(但不是在集合的严格集合论定义中)
如何为这种情况编写工作规范?
【问题讨论】:
-
尝试
A.toSet must containAllOf(B.toSet)- 在字符串上调用toSet将返回字符串中(唯一)Chars 的集合。 -
这不会编译,
A.toSet.toSeq等会通过测试 - 但是这并不能解释为什么上述方法不起作用,什么时候(在我看来)它完全应该:?containAllOf这个名字显然并不意味着它们必须只包含一次,并且左侧不允许包含比右侧更多的字符... -
嗯,如果第一个序列在某处包含整个第二个序列,containAllOf 似乎返回 true,连续且按顺序排列。这不是
Set比较,而是Seq比较。这意味着A.toSet.toSeq对于某些输入也可能会失败(例如,try B = "bbaa"),除非首先对生成的Seqs 进行排序(A.toSet.toSeq.sorted等)。 -
您使用的是哪个版本?可以试试 2.3.1 和 'contain(allOf(B.toSeq:_*))' 吗?
-
我使用的是 2.3.1,不幸的是你的建议显示了完全相同的症状
标签: unit-testing scala specs2