Реальний проект показав мені, що писати одиничні тести неможливо, і тоді інтеграція і навіть протилежний напрямок неправильні :-) Отже, я зазвичай пишу одиничні тести разом з інтеграційними.
Чому? Дозвольте мені написати, як я бачу обидва типи тестів:
Тестові одиниці - Окрім Вікіпедії та всієї відомої інформації, одиничні тести допомагають вам звузити дизайн , покращити модель, відносини. Потік простий: як тільки ви починаєте вводити новий проект / новий компонент, більшу частину часу ви створюєте певний PoC . Коли ви закінчите, у вас завжди є довгі методи, довгі заняття, неузгоджені методи та заняття тощо.
Експериментальні тести допоможуть вам усунути ці проблеми, коли ви робите реальне тестування одиниць, використовуючи макети (без залежності від інших компонентів), описані вище класи не піддаються перевірки. Основна ознака нестійкого коду - велика насмішкова частина тестів, тому що ви змушені знущатися над багатьма залежностями (або ситуаціями)
Інтеграційні тести - правильні та робочі тести говорять про те, що ваш новий компонент (або компоненти) працюють разом або з іншими компонентами - це звичайне визначення. Я виявив, що тести інтеграції здебільшого допомагають вам визначити потік, як використовувати ваш компонент із боку споживача .
Це дійсно важливо, оскільки іноді вам кажуть, що ваш API не має сенсу ззовні.
Ну, а що станеться, коли я потім написав одиничні тести та інтеграційні тести?
Я отримав гарні класи, чіткий дизайн, хороший конструктор, короткі та узгоджені методи, готовий IoC тощо. Після того, як я даю свій клас / API якомусь споживачеві, наприклад розробнику з інтеграції чи команді GUI, він не зміг використати мій API, як здається нелогічним , дивно. Він просто розгубився. Тому я відремонтував API відповідно до його точки зору, але це також вимагало переписати багато тестів, тому що мене підштовхували до зміни методів, а іноді навіть до того, як використовувати API.
Ну, а що станеться, коли я потім написав інтеграційні тести та одиничні тести?
Я отримав точний потік, хорошу зручність використання. У мене також є великі класи, некогерентний код, відсутність журналів, довгі методи. Код спагетті
Яка моя порада?
Я дізнався наступний потік:
- Розробіть базовий скелет свого коду
- Напишіть інтеграційні тести, які говорять, чи має сенс це з точки зору споживачів. На сьогоднішній день достатньо базового використання. Тест, очевидно, не працює.
- Напишіть код разом з одиничними тестами для кожного класу.
- Напишіть решту / пропущені тести інтеграції. Було б краще реалізувати ці тести протягом №3, як ви вдосконалюєте свій код.
Зауважте, що я зробив невелику презентацію про тестування блоку / інтеграції, див. Слайд №21, де описаний кістяк.