断言两个列表在 Spock 框架中相等
我使用Spock框架测试我的应用程序,测试是用Groovy编写的。
作为一些方法评估的结果,我有一个对象列表。我想测试此列表是否与我期望的列表相同。我编写了以下内容:
def expectedResults = [ ... ] //the list I expect to see
def isEqual = true;
when:
def realResults = getRealResultsMethod() //get real results in a list here
expectedResults.each {isEqual &= realResults.contains(it)}
then:
isEqual
0 * errorHandler.handleError(_) //by the way assert that my errorHandler is never called
这是我第一次与Groovy的经历之一,所以可能是我错过了什么?
附言
让我感到困惑的是Groovy和Spock中的“equals”运算符。给定 Java ArrayList 或 Java 数组,equals 运算符只是标识运算符:equals 是 ==。据我所知,在Groovy中,默认等于运算符实际上是相等的(此处的形式:http://groovy.codehaus.org/Differences+from+Java)。但是,对于Groovy List或Set来说,什么是“equals”呢?
更新
更确切地说。我想找出两个列表是否具有相同的对象,两个列表没有额外的对象,顺序无关紧要。例如:
list=[1,5,8]
list1=[5,1,8]
list2=[1,5,8,9]
println(list == list1) //should be equal, if we use == not equal
println(list == list2) //should not be equal, if we use == not equal