AssertEquals с коллекциями с не примитивными параметрами шаблона - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть класс для пары строка-число.В этом классе реализован метод compareTo.

Метод другого класса возвращает коллекцию элементов типа пары.

Я хотел выполнить модульное тестирование этого метода, и поэтомунаписал следующее:

@Test
public void testWeight() {

    Collection<StringNumber<BigDecimal>> expected = new Vector<StringNumber<BigDecimal>>();
    expected.add(new StringNumber<BigDecimal>("a", BigDecimal.ONE));
    expected.add(new StringNumber<BigDecimal>("b", BigDecimal.ONE));

    Collection<StringNumber<BigDecimal>> actual = new Vector<StringNumber<BigDecimal>>();
    expected.add(new StringNumber<BigDecimal>("a", BigDecimal.ONE));
    expected.add(new StringNumber<BigDecimal>("b", BigDecimal.ONE));

    //Collection<StringNumber<BigDecimal>> actual = A.f();

    assertEquals(expected, actual);
}

Но, как вы можете видеть, утверждение не выполняется, хотя элементы в коллекциях идентичны.В чем может быть причина?

Я получаю ошибку

java.lang.AssertionError: ожидается: java.util.Vector <[a: 1, b: 1]>но был: java.util.Vector <[a: 1, b: 1]>

, который не делает сцену для меня.

1 Ответ

1 голос
/ 13 ноября 2011

Ваш StringNumber класс требует equals() метод. Тогда это будет работать. Предполагая, что этот класс содержит поля string и number (автоматически сгенерированные моей IDE):

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (!(o instanceof StringNumber)) {
        return false;
    }
    StringNumber that = (StringNumber) o;
    if (number != null ? !number.equals(that.number) : that.number != null) {
        return false;
    }
    return !(string != null ? !string.equals(that.string) : that.string != null);

}

@Override
public int hashCode() {
    int result = string != null ? string.hashCode() : 0;
    result = 31 * result + (number != null ? number.hashCode() : 0);
    return result;
}

Несколько замечаний:

  • Два Vector (почему вы используете такую ​​архаичную структуру данных) равны , если :

оба [...] имеют одинаковый размер, и все соответствующие пары элементов в двух списках равны. (Два элемента e1 и e2 равны, если (e1==null ? e2==null : e1.equals(e2)).)

Именно поэтому требуется переопределение equals().

...