Я постоянно пытаюсь найти процесс, в котором модульное тестирование не является рутинным занятием и чем-то, что я на самом деле ХОЧУ делать. По моему опыту, довольно важным фактором являются ваши инструменты. Я много работаю над ActionScript, и, к сожалению, инструменты несколько ограничены, например, нет интеграции IDE и нет более продвинутых структур для насмешек (но хорошие вещи не за горами, так что здесь никаких претензий!). Раньше я занимался разработкой на основе тестов с более зрелыми средами тестирования, и это был определенно более приятный опыт, но он все еще казался чем-то вроде рутины.
Однако недавно я начал писать код другим способом. Раньше я начинал с написания теста, наблюдения за его неудачей, написания кода для успешного прохождения теста, промывки и повторения, и все такое.
Теперь, однако, я начинаю с написания интерфейсов, почти независимо от того, что я собираюсь делать. Сначала я, конечно, пытаюсь определить проблему и найти решение. Затем я начинаю писать интерфейсы, чтобы получить некое абстрактное представление о коде и коммуникации. В этот момент я обычно осознаю, что на самом деле я не нашел правильного решения проблемы из-за того, что не до конца понял проблему. Поэтому я возвращаюсь, пересматриваю решение и пересматриваю свои интерфейсы. Когда я чувствую, что интерфейсы отражают мое решение, я фактически начинаю с написания реализации, а не тестов. Когда у меня что-то реализовано (черновой вариант реализован, обычно детские шаги), я начинаю его тестировать. Я продолжаю возвращаться между тестированием и внедрением, делая несколько шагов вперед за раз. Поскольку у меня есть интерфейсы для всего, вставлять макеты невероятно легко.
Я считаю, что работа, подобная этой, с классами, имеющими очень мало знаний о других реализациях и общающимися только с интерфейсами, чрезвычайно освобождает. Это освобождает меня от размышлений о реализации другого класса, и я могу сосредоточиться на текущем модуле. Все, что мне нужно знать, это контракт, предоставляемый интерфейсом.
Но да, я все еще пытаюсь выработать процесс, который работает супер-фантастически-офигенно-хорошо каждый раз.
О, я также хотел добавить, что я не пишу тесты для всего. Ванильные свойства, которые мало что делают, но получают / устанавливают переменные, бесполезны для тестирования. Они гарантированы языковым контрактом на работу. Если нет, у меня проблемы гораздо хуже, чем то, что мои юниты не проходят тестирование.