Изменить: я, конечно, присоединился к TDD Pro / Con Dogpile и пропустил вопрос № 1:
1 - Реализация модульных тестов в веб-формах ASP.net:
Прежде всего, если вы думаете, что можете заставить их пойти с MVC, сражайтесь за него как бешеный пещерный медведь. Как разработчик внешнего интерфейса / пользовательского интерфейса, .net MVC - это то, что помогло мне перестать ненавидеть .net, чтобы я мог лучше сосредоточиться на ненависти к каждому веб-решению на Java, с которым я когда-либо сталкивался. Модульные тесты проблематичны, потому что веб-формы действительно стирают границы между сервером и клиентской стороной. В любой попытке провести модульное тестирование я бы сосредоточился на манипулировании данными и (надеюсь) предположил, что веб-формы управляют нормализацией пользовательского ввода для вас изнутри.
2 - стоит ли в первую очередь юнит-тесты:
Хорошо, полное раскрытие:
- Я в основном самоучка. Мое формальное обучение сводится к тому, чтобы мне нравились один класс JavaScript, PHP и C #, а также мое личное изучение принципов ООП и чтение таких вещей, как Design Patterns.
Тем не мение,
- Я в основном пишу для клиентской части сети, и в действительности программирование написано на одном из самых быстрых и свободных языков в отношении динамической типизации, функций первого класса и изменчивости объектов.
Это означает, что я не пишу для того же компилятора или виртуальной машины. Я пишу примерно для 4-20 различных интерпретаций трех языков (да, два из них просто декларативные, но также определяют фундаментальное физическое пространство пользовательского интерфейса, с которым я иногда работаю по-разному), и делаю это, поскольку интерпретации были намного разнообразнее, чем сегодня. И нет, я не просто ребенок, который использует JQuery для одноразовых приложений. Я помогаю создавать и поддерживать довольно сложные вещи с большим количеством элементов пользовательского интерфейса.
Так что да, есть несколько возможностей для нескольких хитростей здесь и там, чтобы создать массивный каскад сбоев, если ваши навыки проектирования - полная чушь, или вы бросаете посредственных разработчиков в больших количествах при 1-2 проблемах качественного разработчика.
Мое понимание того, что TDD должен сделать для вас, заключается в том, что тесты больше направлены на то, чтобы заставить вас более тщательно продумать дизайн и сосредоточиться на требованиях. Справедливо, но проблема здесь в том, что это сводит на нет то, что вы должны делать, то есть проектирование интерфейса, к чему-то тонко, но принципиально другому, то есть к тестированию интерфейса. Разница для меня заключается в том, чтобы нарисовать ясную картину, в которой маме не нужно будет угадывать смысл, и заполнить всю страницу зеленым цветом очень быстро, чтобы вы могли стать первым ребенком, который хлопнет своими карандашами по столу и выкрикивает: «Готово! " Перенося приоритет на результаты, а не на процессы и дизайн, вы, в основном, поощряете продолжение реализации мусорного кода, который, как правило, изначально был причиной ваших проблем.
И, конечно же, есть «нереальная точка», но часто превозносимая побочная выгода самих модульных тестов, помогающих обнаруживать ошибки регрессии. Сторонники TDD, как правило, немного недовольны тем, является ли это целью или просто изощренным побочным эффектом, IMO, потому что они чертовски хорошо знают или, по крайней мере, подозревают, что этого просто недостаточно, чтобы установить отсутствие ошибок в вашем код, особенно в более динамичном языке, таком как JavaScript, где предполагается, что вы даже можете предсказать каждый возможный сценарий в длинной цепочке зависимостей, безрассудно.
В JS есть место для автоматического тестирования, но гораздо лучше использовать свое время, чем присоединять модульный тест к каждому отдельному «модулю» вашего кода, который вступает в контакт с другим, - это гарантирует, что у вас нет кучки мусорные объекты, которые дублируют работу или чье предполагаемое использование семантически неоднозначно там во-первых. Вы следуете принципу СУХОЙ. Вы абстрагируете вещи для повторного использования / переносимости, когда ценность этого становится очевидной (а не минутой раньше). Вы устанавливаете последовательные процессы и способы ведения дел, следуя принципу больше кнута, чем принципа кнута (т.е. слишком легко использовать ваши вещи правильным способом, чтобы беспокоиться о желании сделать это неправильно). И ради любви ко всему, foo и bar, вы никогда не будете потворствовать масштабным каскадным анти-шаблонам схем наследования как средству повторного использования кода.
Все вышеперечисленное помогло мне серьезно сократить количество трудно диагностируемых ошибок в моем коде, и вы можете поверить, что это является большим приоритетом для того, кто придумал как разработчик с набором браузеров, которому нечего сказать вам лучше, чем " э-э, была проблема с объектом типа 'Объект' в этом воображаемом номере строки в неуказанном файле. " (ну и дела, спасибо IE6) TDD, в моей работе, не будет поощрять эти вещи. Это сместит фокус на 100% результаты по сравнению с процессом, где то, что находится между точкой A и B, не имеет большого значения, пока оно работает. Это бесполезная трата времени, которую лучше использовать, чтобы убедиться, что ваши вещи разборчивы, портативны и легко модифицируются, без каких-либо путаниц.
Или, может быть, я просто слишком чересчур чутко отношусь к той парадигме, в которой я укоренен, но, по моему мнению, правильное выполнение во-первых, гораздо более эффективное использование времени, чем прикрытие задницы, когда вы или кто-либо еще на вашем Команда делает это неправильно. И ничто не должно заставлять вас задумываться над дизайном, а просто воплощать вещи в жизнь. Дизайн должен быть уродливым алтарем каждого программиста. И все, что «заставляет вас» поступать правильно или защищает вас от себя, следует рассматривать с тем же подозрением, которое относится к бутылкам со змеиным маслом, ИМО. Змеиное масло в современных ИТ и общих разработках, если вы еще не знаете, продается за тонну жидкости.