Нормально ли тратить столько времени, если не больше, на написание тестов, чем на реальный код?
Да, это. С некоторыми оговорками.
Прежде всего, это «нормально» в том смысле, что большинство крупных магазинов работают таким образом, поэтому, даже если этот путь был полностью ошибочным и глупым, тем не менее, тот факт, что большинство крупных магазинов работают таким образом, делает его «нормальным».
Под этим я не подразумеваю, что тестирование это неправильно. Я работал в средах без тестирования и в средах с обсессивно-компульсивным тестированием, и я все еще могу сказать вам, что даже обсессивно-компульсивное тестирование было лучше, чем отсутствие тестирования.
И я пока не делаю TDD (кто знает, возможно, в будущем), но я делаю подавляющее большинство циклов редактирования-запуска-отладки, выполняя тесты, а не само приложение, поэтому, естественно, я много работаю на моих тестах, чтобы избежать, насколько это возможно, необходимости запуска фактического приложения.
Однако следует помнить, что при чрезмерном тестировании существуют опасности, особенно в отношении количества времени, затрачиваемого на поддержание тестов. (Я прежде всего пишу этот ответ, чтобы конкретно указать на это.)
В предисловии Роя Ошерова « Искусство модульного тестирования» (Мэннинг, 2009) автор признается, что участвовал в проекте, который в значительной степени потерпел неудачу из-за огромного бремени разработки, налагаемого плохо разработанными модульными тестами, которые должны были поддерживаться на протяжении всего длительность разработки. Таким образом, если вы обнаружите, что тратите слишком много времени, не делая ничего, кроме поддержания своих тестов, это не обязательно означает, что вы находитесь на правильном пути, потому что это «нормально». Возможно, ваши усилия по разработке вошли в нездоровый режим, где радикальное переосмысление вашей методики тестирования может быть необходимо для сохранения проекта.