Те, що ви описуєте, насправді не може бути таким поганим, але вказує на глибші проблеми, які виявляють ваші тести
Коли система змінюється, ми виявляємо, що ми витрачаємо більше часу на виправлення зламаних тестів. У нас є одиничні, інтеграційні та функціональні тести.
Якби ви могли змінити свій код, а ваші тести не зламалися, це було б мені підозріло. Різниця між законною зміною та помилкою полягає лише в тому, що вона запитується, те, що запитується (передбачається TDD), визначене вашими тестами.
дані жорстко закодовані.
Жорстко закодовані дані в тестах - це добра річ. Тести працюють як фальсифікати, а не як докази. Якщо обчислень занадто багато, ваші тести можуть бути тавтологіями. Наприклад:
assert sum([1,2,3]) == 6
assert sum([1,2,3]) == 1 + 2 + 3
assert sum([1,2,3]) == reduce(operator.add, [1,2,3])
Чим вище абстракція, тим ближче ви наближаєтесь до алгоритму, і тим самим ближче до порівняння акутальної реалізації до себе.
дуже мало використання коду
Найкраще повторне використання коду в тестах - це imho 'Checks', як і у jUnits assertThat
, оскільки вони прості тести просто. Крім того, якщо тести можуть бути відремонтовані для спільного використання коду, фактичний тестований код, ймовірно, може бути занадто , таким чином зводячи тести до тих, що тестують рефакторовану базу.