Який найкращий спосіб дії в TDD, якщо після правильної реалізації логіки тест все-таки не працює (бо в тесті є помилка)?
Наприклад, припустимо, ви хочете розробити таку функцію:
int add(int a, int b) {
return a + b;
}
Припустимо, ми розробляємо його наступними кроками:
Написати тест (поки функцій немає):
// test1 Assert.assertEquals(5, add(2, 3));
Результати помилки компіляції.
Напишіть реалізацію фіктивної функції:
int add(int a, int b) { return 5; }
Результат:
test1
паси.Додати ще один тестовий випадок:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Результат:
test2
не вдається,test1
все-таки проходить.Написати реальну реалізацію:
int add(int a, int b) { return a + b; }
Результат:
test1
все-таки проходить,test2
все ще не вдається (з тих пір11 != 12
)
У цьому конкретному випадку: чи було б краще:
- виправити
test2
і побачити, що це зараз проходить, або - видаліть нову частину реалізації (тобто поверніться до кроку №2 вище), виправте
test2
і нехай це не вдасться, а потім знову введіть правильну реалізацію (крок №4. вище).
Або є якийсь інший, розумніший спосіб?
Хоча я розумію, що проблема прикладу досить тривіальна, мене цікавить, що робити в загальному випадку, який може бути складнішим, ніж додавання двох чисел.
EDIT (У відповідь на відповідь @Thomas Junk):
У центрі уваги цього питання - те, що пропонує TDD в такому випадку, а не те, що є "найкращою універсальною практикою" для досягнення хорошого коду чи тестів (які можуть відрізнятися від способу TDD).