Інтеграція та одиничні тести
Ви повинні тримати тести своїх одиниць і ваші інтеграційні тести повністю відокремленими. Ваші одиничні тести повинні перевіряти лише одне і одне, а також повністю ізолювати решту системи. Одиниця визначена непросто, але вона зазвичай зводиться до методу чи функції.
Є сенс мати тести для кожного блоку, щоб ви знали, що їх алгоритми реалізовані правильно, і ви відразу знаєте, що пішло не так, якщо реалізація є недоліком.
Оскільки ви протестуєте повну ізоляцію під час тестування одиниць, ви використовуєте заглушки та знущаються над об'єктами, щоб вести себе як і решта вашої програми. Тут проводяться інтеграційні тести. Тестування всіх одиниць ізольовано, але вам потрібно знати, чи реально вони працюють разом.
Це означає знати, чи справді модель зберігається в базі даних чи дійсно попередження видається після відмови алгоритму X.
Тестово-розвинений розвиток
Якщо зробити це крок назад і подивитися на тест-керовану розробку (TDD), слід врахувати кілька речей.
- Ви пишете свій тест на одиницю, перш ніж фактично написати код, який змушує його пройти.
- Ви зробите тестовий пропуск, напишіть достатньо коду для цього.
- Тепер, коли тест проходить, настав час зробити крок назад. Чи є що-небудь для рефактора з цією новою функціональністю? Це можна зробити безпечно, оскільки все охоплене тестами.
Інтеграція перша - Інтеграція остання
Інтеграційні тести вписуються в цей цикл TDD двома способами. Я знаю людей, які люблять писати їх заздалегідь. Вони називають тест на інтеграцію тестом "кінець в кінці" і визначають тест "від кінця до кінця" як тест, який повністю випробовує весь шлях корисної коробки (подумайте про налаштування програми, завантаження програми, перехід до контролера, виконання його, перевірка результату, результату тощо ...). Потім вони починають свій перший тест на одиницю, змушують його пройти, додати другий, зробити його проходження тощо. Повільно все більше і більше частин тесту на інтеграцію проходять також до тих пір, поки функція не буде закінчена.
Інший стиль - це побудова тестування одиничних можливостей за допомогою тестування одиниць та додавання тестів інтеграції, які вважаються необхідними після цього. Велика різниця між цими двома полягає в тому, що у випадку тесту на інтеграцію спочатку ви змушені думати про розробку програми. Цей вид не погоджується з припущенням, що TDD стосується дизайну додатків стільки ж, скільки щодо тестування.
Практика
У мене на роботі всі наші тести в одному проекті. Однак існують різні групи. Інструмент безперервної інтеграції спочатку виконує те, що позначено як одиничні тести. Тільки якщо вони досягли успіху, також виконуються повільніші (оскільки вони роблять реальні запити, використовують реальні бази даних тощо) інтеграційні тести.
Ми, до речі, використовуємо один тестовий файл для одного класу.
Пропоноване читання
- Зростаюче об’єктно-орієнтоване програмне забезпечення, керується тестами Ця книга є надзвичайно хорошим прикладом першої методології тесту інтеграції
- Мистецтво одиничного тестування, з прикладами в dot.net Про тестування одиниць, із прикладами в dot.net: D Дуже хороша книга про принципи, що стоять за тестуванням одиниці.
- Роберт К. Мартін на TDD (Безкоштовні статті): Читайте перші два статті, які він також пов’язував.