Mockito调用Object的equals()方法

时间:2013-06-21 21:09:05

标签: java testing mockito

我是Mockito的新人。 我有

Map<String, Object> expectedFilter = new HashMap<String, Object>()
expectedFilter.put("ids", new Integer[]{22});
expectedFilter.put("codes", new Integer[]{1});

并使用此地图作为参数编写存根。为什么mockito会调用Object的等于,而地图中的实际值是Integer?

谢谢!

1 个答案:

答案 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。