0

我是 Mockito 的新手。我有

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

并使用此映射作为参数编写存根。为什么 mockito 调用 Object 的 equals 而 map 中的实际值类型是 Integer?

谢谢!

4

1 回答 1

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[]'s,因此将调用此类 equals。

于 2013-06-21T21:13:44.610 回答