Следует ли исправлять код, если он работает корректно, но не проходит тест?

«Следует ли исправлять код, если он работает корректно, но не проходит тест?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, код необходимо исправить. Тесты являются формальной спецификацией ожидаемого поведения. Провал теста означает, что реализация не соответствует заявленным требованиям, даже если её текущее поведение кажется логичным.

Пример:

// Тест: assertEquals(5, calculator.sum(2, 3));
public int sum(int a, int b) {
    return a * b; // Ошибка! Тест ожидает сложение.
}

Здесь код выполняет умножение без ошибок, но это баг, так как нарушена контрактная спецификация метода sum.

Исключение: Если тест устарел, ошибочен или проверяет нерелевантные детали реализации (например, внутреннюю структуру объекта), то править нужно тест, а не код. Такое изменение требует ревью и согласования с командой.