Я недавно изучал TDD, посетил конференцию и несколько раз пробовал пройти тесты, и я уже на 100% продан, мне очень нравится TDD.
В результате я поднял этот вопрос у своих старших, и они готовы дать ему шанс, поэтому мне поручили придумать, как внедрить TDD в разработку нашего корпоративного продукта.
Проблема в том, что наша система развивалась со времен VB6 до .NET и реализует много устаревших технологий и некоторые далекие от лучших методов разработки, то есть много бизнес-логики в коде ASP.NET и клиентском скрипте. Однако самая большая проблема заключается в том, как наши классы тесно связаны с доступом к базе данных; свойства, методы, конструкторы - обычно имеет доступ к базе данных в той или иной форме.
Мы используем собственный генератор кода доступа к данным, который создает sqlDataAdapters, который дает нам весь доступ к базе данных, который мы когда-либо хотели, что помогает нам разрабатывать очень быстро, однако классы на нашем бизнес-уровне очень тесно связаны с этими данными слой - мы даже не близки к реализации какой-либо формы дизайна хранилища. Это и вышеперечисленные проблемы создали мне всевозможные проблемы.
Я пытался разработать некоторые модульные тесты для некоторых существующих классов, которые я уже написал, но тесты занимают ОЧЕНЬ больше времени, так как требуется доступ к БД, не говоря уже о том, что мы используем инфраструктуру MS Enterprise Caching, которую я вынужден подделать httpcontext для успешного выполнения моих тестов, что непрактично. Кроме того, я не понимаю, как использовать TDD для разработки новых классов, которые я пишу, поскольку они должны быть так тесно связаны с базой данных ... помогите!
Из-за архитектуры системы кажется, что я не могу реализовать TDD без какого-либо реального взлома, который, на мой взгляд, просто наносит ущерб цели TDD и огромным преимуществам, которые приходят с ней.
У кого-нибудь есть предложения, как мне реализовать TDD с ограничениями, с которыми я связан? Или мне нужно протолкнуть шаблон проектирования репозитория до глубины души и сказать им, что мы либо изменим нашу методологию архитектуры / разработки, либо вообще забудем о TDD? :)
Спасибо