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