Модульное тестирование равно и хэш-код - сложная история

У меня моральная дилемма. В моем приложении есть несколько объектов значений, которые неизменны и чрезвычайно просты. Я' ve сгенерировал равенства и хэш-код с помощью IDE (intellij в моем случае), но это привело к падению покрытия кода, плюс отчеты теперь показывают, что эти объекты значений очень сложны (с использованием метрики цикломатической сложности ) хотя на самом деле они очень просты.

В качестве примера, следующее равенство находится в объекте значения, который имеет 3 неизменяемых атрибута. Сложность кода составляет 14 (javaNCSS) и 26 ветвей выполнения (Cobertura). Я должен также добавить, что я не выполняю сборку, если какой-либо метод имеет сложность больше 10.

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }

    TranscriptTaskDetails that = (TranscriptTaskDetails) o;

    if (inputFile != null ? !inputFile.equals(that.inputFile) : that.inputFile != null) {
        return false;
    }
    if (language != that.language) {
        return false;
    }
    if (outputFile != null ? !outputFile.equals(that.outputFile) : that.outputFile != null) {
        return false;
    }

    return true;
}

Мне интересно, что другие разработчики используют, чтобы обойти это, поскольку я уделяю довольно много внимания отчетам о сложности, как в по моему опыту, показатель высокой сложности связан с большим количеством ошибок, поэтому эти автоматически сгенерированные равенства и хэш-коды загрязняют отчеты.

I ' Я думаю об использовании EqualsBuilder и HashcodeBuilder из apache commons-lang, чтобы обойти это, но я не на 100% счастлив: S.

Edit

Мне следовало добавить ту часть кода, который я пишу для этого проекта это библиотека, которая будет использоваться другими бизнес-подразделениями ... И также будет поддерживаться другой командой: S.

8
задан Augusto 23 April 2011 в 13:57
поделиться