以下测试通过,而我实际上希望看到它失败。该命令对我的用例很重要。但是我认为groovy总是使用链表,所以排序应该是可测试的。
def "test foo"() {
given:
def a = [a: 1, c: 3, b: 2]
when:
def b = [a: 1, b: 2, c: 3]
then:
a == b
}
答案 0 :(得分:2)
如果要在这两个LinkedHashMap
实例中测试密钥的顺序,可以执行以下操作:
def "test foo"() {
given:
def a = [a: 1, c: 3, b: 2]
when:
def b = [a: 1, b: 2, c: 3]
then: "make sure maps are equal"
a == b
and: "make sure entries are defined in the same order"
a.collect { it.key } == b.collect { it.key }
}
LinkedHashMap
不会覆盖equals
方法(它使用AbstractMap
类中定义的方法,例如HashMap
使用的方法),它只定义了迭代(条目添加到地图的顺序)。
两个断言都可以简化为单个:
def "test foo"() {
given:
def a = [a: 1, c: 3, b: 2]
when:
def b = [a: 1, b: 2, c: 3]
then: "compare ordered list of map entries"
a.collect { it } == b.collect { it }
}
答案 1 :(得分:-1)
您可以在比较中使用toMapString()
a.toMapString() == b.toMapString()
toMapString将地图转换为字符串,这意味着订单将影响比较
'[a:1, c:3, b:2]' == '[a:1, b:2, c:3]'
将返回false。