Page 112 - 4190
P. 112
тування, не залишалися у випускному коді. У Сі для цього можуть
бути використані директиви умовної компіляції. Але це буде означа-
ти, що вихідний код буде повністю співпадати з протестованим. Сис-
тематичний запуск інтегрованих тестів на випукаємій зборці допома-
гає переконатися, що не залишилося коду, приховано призначеного
на різні аспекти модульних тестів.
Не існує єдиної думки серед програмістів, які застосовують роз-
роблення через тестування про те, наскільки це осмислено тестувати
private- і protected-методи та дані. Один переконаний, що досить
протестувати будь-який класс тільки через його public-інтерфейс,
оскільки private-члени – це лише деталі реалізації, яка може змінюва-
тися, і її зміни не повинні відображатися на наборі тестів. Інші ствер-
джують, що важливі аспекти функціональності можуть бути реалізо-
вані в private- методах і тестування їх неявно через public-інтерфейс
лише ускладнить ситуацію: модульне тестування передбачає тесту-
вання найменших можливих модулів функціональності.
Fake-, mock – об’єкти та інтеграційні тести. Модульні тести
тестують кожний модуль окремо. Не важливо, чи містить модуль со-
тні тестів, чи всього п’ять. Тести, що використовуються при розроб-
лення через тестування, не повинні перетинати границі процесу, ви-
користовувати мережеві з’єднання. В іншому випадку проходження
тестів буде займати значний час, і розробники будуть рідше запуска-
ти набір тестів цілком. Введення залежності від зовнішніх модулів
або даних також перетворюють модульні тести в інтеграційні. При
цьому якщо один модуль в ланцюжку веде себе неправильно, може
бути не відразу зрозуміло, як саме.
Коли код, який розробляють, використовує база даних, веб-
сервери або інші зовнішні процеси, є сенс виділити частину, що по-
кривається тестами. Це виконується в два кроки:
1. Всюди, де необхідний доступ до зовнішніх ресурсів, повинен
бути оголошений інтерфейс, через який цей доступ буде здійснюва-
тися.
2. Інтерфейс повинен мати дві реалізації. Перша, власне надає до-
ступ до ресурсу, і друга, що є fake- або mock-об’єктом. Все, що робить
fake- об’єкти, це додають повідомленням вигляду «Об’єкт person збе-
режено» в лот, щоб потім перевірити правильність поведінки. Mock-
об’єкти відрізняються від fake-об’єктів тим, що самі містять твер-
дження (assertion), що перевіряють поведінку коду, який тестується.
Методи fake- і mock-об’єктів, що повертають дані, можна налагодити
112