我是Mockito的新人。 我有
Map<String, Object> expectedFilter = new HashMap<String, Object>()
expectedFilter.put("ids", new Integer[]{22});
expectedFilter.put("codes", new Integer[]{1});
并使用此地图作为参数编写存根。为什么mockito会调用Object的等于,而地图中的实际值是Integer?
谢谢!
答案 0 :(得分:1)
你将Integer []放入地图,而不是整数。 Integer []不会覆盖Objects equals,因此将调用它。为了解决这个问题,你可以编写一个包装类,它在数组内容上调用equals:
public class ArrayWrapper<E> {
private E[] data;
public ArrayWrapper(E[] data) {
this.data = Arrays.copyOf(data, data.length);
}
@Override public boolean equals(Object other) {
if (this == other) return true;
if (!(other instanceof ArrayWrapper)) return false;
ArrayWrapper o = (ArrayWrapper)other;
if (this.data.size != o.data.size) return false;
for (int i = 0; i < this.data.size; i++)
if (!this.data[i].equals(o.data[i]) return false;
return true;
}
}
并将此类的实例添加到地图而不是Integer [],因此将调用此类equals。