TestCase
У простих тестах твердження можуть слідувати одне за одним. Але іноді корисно укласти твердження в тестовий клас і структурувати їх таким чином.
Клас має бути нащадком Tester\TestCase
, і ми говоримо про нього просто
як про testcase.
Ми можемо збагатити тесткейс методами setUp()
і tearDown()
.
Вони викликаються до/після кожного методу тестування:
Якщо помилка станеться у фазі setUp()
або tearDown()
, тест буде
провалено. Якщо помилка виникає в методі тестування, то метод
tearDown()
викликається в будь-якому разі, але з пригніченими в ньому
помилками.
Ми рекомендуємо писати анотацію @testCase на початку тесту, тоді програма запуску тестів командного рядка запускатиме окремі методи тесткейсу в окремих процесах і паралельно в декількох потоках. Це може значно прискорити весь процес тестування.
Анотування методів
Існує кілька анотацій, які допоможуть нам у тестуванні методів. Ми пишемо їх у напрямку методу тестування.
@throws
Це таке саме використання Assert::exception()
всередині методу
тестування. Але позначення більш читабельне:
@dataProvider
Ця анотація підходить, коли ми хочемо запустити метод тестування кілька разів, але з різними аргументами. (Не плутати з однойменною анотацією для файлів).
Як аргумент ми пишемо ім'я методу, який повертає параметри для методу тестування. Метод має повертати масив або Traversable. Простий приклад:
Інша варіація анотації @dataProvider приймає як аргумент шлях до
INI-файлу (щодо тестового файлу). Метод викликається стільки разів,
скільки секцій міститься в INI-файлі. Файл loop-args.ini
:
і метод, що використовує INI-файл:
Аналогічно, ми можемо передати шлях до PHP-скрипту замість INI. Він
повинен повертати масив або Traversable. Файл loop-args.php
: