Редагувати: я, звичайно, приєднався до dogpile TDD pro / con і пропустив питання №1:
1 - Впровадження модульних тестів у веб-формах ASP.net:
Перш за все, якщо ви думаєте, що можете змусити їх поїхати з MVC, боройтеся за це, як шалений печерний ведмідь. Як розробник інтерфейсу / інтерфейсу користувача, .net MVC - це те, що допомогло мені припинити ненависть. Тести блоків є проблематичними, оскільки веб-форми дійсно розмивають лінії між сервером та клієнтом. У будь-якій спробі зробити тестування одиниць я б зосередив увагу на маніпулюванні даними та (сподіваюсь), припускаю, що веб-форми обробляють нормалізацію введення користувача під кришку.
2 - Про те, чи варто в першу чергу одиничні тести:
Добре, повне розкриття інформації:
- Я здебільшого самоучка. Моя формальна підготовка зводиться до одного JavaScript, PHP та C # класу та мого особистого вивчення принципів OOP та читання з таких матеріалів, як шаблони дизайну.
Однак,
- Я здебільшого пишу для веб-сторінок на клієнтах, а фактична частина програмування є однією з найшвидших та найширших мов, що стосується динамічного набору тексту, функцій першого класу та змінних об'єктів.
Це означає, що я не пишу для одного компілятора чи віртуальної машини. Я пишу на зразок 4-20 різних інтерпретацій трьох мов (так, дві з них просто декларативні, але також визначають фундаментальний фізичний простір інтерфейсу, з яким я працюю по-різному) і роблю це, оскільки інтерпретації були набагато різноманітніші, ніж вони є сьогодні. І ні, я не просто дитина, яка підключає речі JQuery для одноразових додатків. Я допомагаю створювати та підтримувати досить складні речі з великою складністю елементів інтерфейсу.
Так, так, є багато можливостей для декількох налаштувань тут і там, щоб створити величезний каскад збоїв, якщо ваші дизайнерські навички - це повне лайно або ви кидаєте посередні диски у великих кількостях при 1-2 проблемах із розробкою якості.
Я розумію, що TDD повинен зробити для вас, полягає в тому, що тести справді більше змушують вас уважніше розглядати дизайн та зосереджуватись на вимогах. Досить справедливо, але проблема тут полягає в тому, що він підриває те, що ви повинні робити, це проектування в інтерфейс, на щось тонко, але принципово інше, що розробляється для тестів інтерфейсу. Для мене різниця полягає в тому, щоб намалювати чітку картину, що мамі не доведеться вгадувати сенс і заповнювати всю сторінку зеленим кольором дуже швидко, щоб ви могли бути першим малюком, хто ляпає своїми олівцями по столу, і кричати "зроблено! " Пересуваючи пріоритет на результати над процесом та дизайном, ви в основному заохочуєте продовжувати впровадження коду для сміття, який, як правило, в першу чергу лежить в основі ваших проблем.
І, звичайно, є "не реальна точка", але часто похвальна побічна перевага самих одиничних тестів, що допомагає виявити помилки регресії. Прихильники TDD, як правило, трохи не хочуть бачити, чи це насправді мета, чи просто чудовий побічний ефект, IMO, тому що вони добре знають, або підозрюють принаймні, що цього просто недостатньо для встановлення відсутності помилок у вашому коду, особливо на більш динамічній мові, як JavaScript, де припускати, що ви навіть можете передбачити кожен можливий сценарій у довгому ланцюгу залежностей, є дурним.
У JS є місце для автоматизованого тестування, але набагато краще використовувати свій час, ніж приєднувати тест одиниці до кожної «одиниці» вашого коду, яка контактує з іншою, це гарантує, що у вас немає купки сміттєві об’єкти, які дублюють роботу або чиє цільове використання в першу чергу семантично неоднозначне. Ви дотримуєтесь принципу DRY. Ви абстрагуєте речі для повторного використання / перенесення, коли значення цього зробить очевидним (і ні хвилини раніше). Ви встановлюєте послідовні процеси та способи виконання дій, керуючись принципом моркви, ніж палиці (тобто надто просто використовувати свої речі правильним способом, щоб заважати бажаючи зробити це не так). А для любові до всього та іншого, ви ніколи не будете балуватися масовими каскадними схемами успадкування анти-шаблонами як засобом повторного використання коду.
Все вищесказане допомогло мені серйозно знизити важкі для діагностики помилки в моєму коді, і ви можете довіряти, що це великий пріоритет для того, хто з'явився розробником із набором браузера, який не мав нічого кращого сказати вам, ніж " е-е, виникла проблема з об’єктом типу "Об'єкт" за цим уявним номером рядка в не вказаному файлі. " (да, дякую IE6) TDD в моїй роботі не заохочував би це. Це змістить фокус на 100% результати над процесом, де те, що між точкою А і В, насправді не має значення, поки воно працює. Це марна трата часу, яку краще застосувати для того, щоб переконатися, що ваші речі є розбірливими, портативними та їх легко модифікувати, в першу чергу не збиваючи з пантелику злому.
А може, я просто надмірно зухвало ставився до парадигми, якою я вкорінюється, але, на мою думку, це зробити правильно в першу чергу - це набагато ефективніше використання часу, ніж прикриття твого прикладу, коли ти чи всі інші на своєму команда робить це неправильно. І ніщо не повинно змушувати вас розглядати дизайн над тим, як реалізувати речі. Дизайн повинен бути чудовим вівтарем кожного програміста. І все, що «змушує вас» зробити правильну справу чи захищає вас від себе, слід розглядати з тією ж підозрою, що зберігається для пляшок зміїної олії, ІМО. Зміїна олія в сучасних ІТ та загальних розробках, якщо ви ще не знаєте, продається рідкою тоною.