То, что вы описываете, может быть не таким уж плохим, но указателем на более глубокие проблемы, обнаруженные вашими тестами.
По мере изменения системы мы тратим больше времени на исправление неработающих тестов. У нас есть модульные, интеграционные и функциональные тесты.
Если бы вы могли изменить свой код, и ваши тесты не сломались бы, это было бы подозрительно для меня. Разница между допустимым изменением и ошибкой заключается только в том, что она запрашивается, а то, что запрашивается, (согласно предположению 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
, потому что они делают тесты простыми. Кроме того, если тесты могут быть подвергнуты рефакторингу для совместного использования кода, возможен и реальный тестируемый код , что сводит тесты к тестированию базы с рефакторингом.