Але щойно з’являється щось складніше — хоча б якась бізнес логіка (перевірка на консистентність переданих даних, якась особлива фільтрація чи сортування, перемаплення не 1-в-1 а щось поскладніше) — то вже можна юніт-тестувати.
просто не думають, що є і інші світи.
Тут трохи не згодний. Книжки про тестування описують універсальні рішення без привʼязки до якихось деталей проекту. Я не бачив книжок на кшталт «Автоматизація тестування CRUD» чи «Unit-тестування вбудованих рішень».
Якщо контролери-сервіси-даошки мають однорядочкові методи, котрі просто викликають одне одного і перетягують дані з бази на UI — тоді так, змісту з юніт-тестів небагато.
Якщо в мене всередині сервісу є ще чотири сервіси, я замокав усі чотири, а в самому тесті перевіряю, що метод вертає те, що вертає четвертий мок в порядку — то я успішно перевірив моє знання Mockito, але аж ніяк не бізнес-логіку.
Ключова фіча моків — це можливість перевірки взаємодії/інтеракції з об’єктом.
Так, але, на жаль, часто моки використовують там, де їх використовувати не треба. Цитуючи вас же ж:
Просте правило: ми мокаємо залежності юніта, який ми тестуємо.
У порядку дискусії скажу, що цикломатична складність більш важлива, ніж проста кількість рядків. Про «майже ніколи» — да, але це не має перетворитись в «ніколи», і не має бути самодостатнім принципом.
Фаулер може писати що завгодно, але, наприклад, пітонівський unittest.mock універсально виконує і mock, і stub, і dummy, і фактично навіть ближче до stub (бо на невідомі виклики не дає винятків).
Ну як завжди, www.joelonsoftware.com/2002/05/06/five-worlds
Ті хто сидить на «внутрішньому» софті — навіть якщо він в 2024 виглядає як перший бекенд веба, який далі є фронтендом для якогось мікросервіса — просто не думають, що є і інші світи.
99% тутешніх пише Круд сервіси. Ні бібліотеки, ні фреймворки, ні бази даних, а Круд сервіси. Навіть в цій статті всі приклади пов’язані з Users & Orders. В Круд сервісах юніт тести не потрібні в 99% випадків.
чудово, є дуже багато кейсів і випадків. У кожного свої трейдофи, і завжди потрібно думати що робити а що ні. Але тепер завдяки вам ми знаєм хоч щось що працює будь-де і завжди, велика істина — Unit тести не потрібні.
Якщо в мене всередині сервісу є ще чотири сервіси, я замокав усі чотири, а в самому тесті перевіряю, що метод вертає те, що вертає четвертий мок в порядку — то я успішно перевірив моє знання Mockito, але аж ніяк не бізнес-логіку.
Коментарі