Устранение ошибки «нулевого сравнения» в SonarQube при тестировании equals () - PullRequest
0 голосов
/ 18 мая 2018

SonarQube выдает мне серьезную ошибку в моих отчетах о коде качества:

Уберите этот вызов "равно";сравнения с нулем всегда возвращают ложь;рассмотрите возможность использования '== null' для проверки на недействительность.

Однако этот вызов equals является переопределенным, что означает, что я хотел бы проверить, что произойдет, если мой объект на самом деле будет нулевым внутриequals() method.

Есть ли способ обойти эту проблему?Разве я не должен проверять обнуляемость моего объекта, или у меня нет другого выбора, кроме как игнорировать этот случай?


РЕДАКТИРОВАТЬ Код, указанный в комментариях:

Сам объект:

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    MyTestedObject other = (MyTestedObject) obj;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    if (type != other.type)
        return false;
    return true;
}

Внутри теста:

@Test
public void test()    {
    MyTestedObject testedObject = new MyTestedObject();

    boolean nullValue = testedObject.equals(null);
    Assert.assertFalse(nullValue);
}

1 Ответ

0 голосов
/ 18 мая 2018

SonarQube сообщает вам, что в вашем коде есть ошибка.Контракт на equals, если он четко определен в java spec :

Для любого ненулевого ссылочного значения x, x.equals(null) должно возвращать false.

Если вы делаете это по-другому в переопределении - вы делаете это неправильно.

...