given:
def companyList = [ "Second", "First", "Second"]
expect:
that companyList, containsInAnyOrder("First", "Second")
Condition not satisfied:
that companyList, containsInAnyOrder("First", "Second")
| |
| [Second, First, Second]
false
Expected: iterable over ["First", "Second"] in any order
but: Not matched: "Second"
4条答案
按热度按时间uttx8gqw1#
您可以在Spock中使用Hamcrest支持,并使用为这种情况明确设计的
Matcher
-containsInAnyOrder
。您需要以下导入:然后,您可以编写测试代码如下:
与使用
.sort()
相比,这有一个好处,即List中的重复元素将被正确考虑。使用Hamcrest时,以下测试将失败,但使用.sort()
时通过如果您使用
then:
而不是expect:
,则可以使用expect
而不是that
导入以提高可读性。chhkpiq42#
据我所知没有这样的接线员。如果列表不包含任何重复项,则可以使用以下Assert:
或者类似的东西:
eit6fx6z3#
对@Opal的回答表示赞同,这可能是所有方面中最好的。出于好奇,我只想添加一个使用减运算符来比较两个未排序列表的例子:
如果其中一个列表包含冗余数据,它也可以工作。
ehxuflar4#
现在Spock中有专门的匹配器available:
可以使用以下运算符比较列表元素,而忽略它们的顺序:
==~
-严格匹配(考虑重复元素等)=~
-宽松匹配(忽略重复项)所以
[1,2,3] ==~ [2,3,1]
是真的。