Ответ
Да, код необходимо исправить. Тесты являются формальной спецификацией ожидаемого поведения. Провал теста означает, что реализация не соответствует заявленным требованиям, даже если её текущее поведение кажется логичным.
Пример:
// Тест: assertEquals(5, calculator.sum(2, 3));
public int sum(int a, int b) {
return a * b; // Ошибка! Тест ожидает сложение.
}
Здесь код выполняет умножение без ошибок, но это баг, так как нарушена контрактная спецификация метода sum.
Исключение: Если тест устарел, ошибочен или проверяет нерелевантные детали реализации (например, внутреннюю структуру объекта), то править нужно тест, а не код. Такое изменение требует ревью и согласования с командой.
Ответ 18+ 🔞
А, ну ты смотри, опять этот вечный спор, как будто впервые. Слушай, давай сразу начистоту: код надо править, если тесты падают. Это не обсуждается, это как закон природы, блядь. Тесты — это не просто какая-то хуйня, которую написал сосед по open space, это формальная бумажка, контракт, ёпта! Если в нём написано «два плюс три равно пять», а твой метод выдаёт шесть — ты не гений, а просто мудак, который не умеет складывать.
Вот смотри, наглядный пиздец:
// Тест чётко говорит: assertEquals(5, calculator.sum(2, 3));
public int sum(int a, int b) {
return a * b; // Ой, бля, а что не так? Умножение же тоже работает!
}
Работает-то работает, ебушки-воробушки, но это же баг, ёпта! Ты нарушил договорённость! Метод называется sum, все ожидают сложения, а ты тут со своим умножением выехал. Это как прийти в магазин за хлебом, а тебе впаривают кирпич: «Ну он тоже твёрдый, чего бузишь?».
Но! Есть одно жирное «НО», которое вротберунчик всем забывает. Если тест — это старый, кривой, оторванный от реальности кусок говна, который проверяет не «что», а «как»... Ну, там, залез тебе в кишки объекта, смотрит на приватные поля, требует определённого порядка вызовов — вот это уже пиздопроебибна. В таком случае править надо тест, а не код. Но, блядь, это не твоё личное решение! Это как минимум ревью, согласование с командой, чтоб все понимали, почему мы этот артефакт хороним. А то начнётся: «А у меня на проде всё работало!». Да похуй, что работало, спецификация-то изменилась!
Короче, правило простое, как хуй с горы: Падающий тест — это всегда проблема. Либо в коде, либо в самом тесте. Игнорировать её — это прямой путь в ад, где в production'е всё горит, а ты охуело ищешь, почему «оно же работало».