Наразі я встановлюю основу для програми ASP.Net MVC, і я розглядаю, які саме тестові одиниці я повинен бути готовий написати. Я бачив, що люди в багатьох місцях говорять: "Не турбуйтеся перевіряти свої погляди, немає логіки, і це банально, і тест на інтеграцію буде охоплений".
Я не розумію, як це стало прийнятою мудрістю. Інтеграційні тести служать зовсім іншому призначенню, ніж одиничні тести. Якщо я щось зламаю, я не хочу знати через півгодини, коли мої інтеграційні тести зламаються, я хочу знати це негайно.
Зразок сценарію: Скажімо, ми маємо справу зі стандартним додатком CRUD з юридичною особою Замовника. Замовник має ім'я та адресу. На кожному рівні тестування я хочу переконатися, що логіка пошуку Клієнта правильно отримує і ім’я, і адресу.
Для тестування одиниці сховища я записую тест на інтеграцію для потрапляння в базу даних. Для тестування бізнес-правил я знущаюся з сховища, подаю відповідні дані правилам бізнесу та перевіряю, чи повертаються очікувані результати.
Що я хотів би зробити: Щоб перевірити модуль інтерфейсу користувача, я знущаюся з бізнес-правил, налаштовую очікуваний екземпляр клієнта, переглядаю і переконуюсь, що представлення містить відповідні значення для вказаного нами екземпляра.
Що я застряг: Для тестування репозиторію я пишу тест на інтеграцію, встановлюю відповідний логін, створюю необхідні дані в базі даних, відкриваю браузер, переходжу до клієнта та перевіряю, чи отримана сторінка містить відповідну значення для вказаного я екземпляра.
Я розумію, що між двома розглянутими вище сценаріями існує перекриття, але ключова різниця - це час і зусилля, необхідні для налаштування та виконання тестів.
Якщо я (або інший розробник) видаляє адресне поле з подання, я не хочу чекати тесту інтеграції, щоб виявити це. Я хочу, щоб це було виявлено та позначено в тестовому блоці, який отримує кілька разів на день.
У мене виникає відчуття, що я просто не сприймаю якусь ключову концепцію. Чи може хтось пояснити, чому бажати негайних відгуків про тест на обґрунтованість перегляду MVC - це погано? (або якщо це не погано, то не очікуваний спосіб отримати відповідь)
"To unit-test the repository, I write an integration test"
Чекати, що? Це не одиничне тестування сховища. Ви автоматизуєте тест для нього, але тестовий код все ще включає DAL та базу даних. Для перевірки наявного у вас сховища ви виділите його так, як у вас є, для правил вашого бізнесу.