Функціональне тестування
Перед прочитанням даного розділу рекомендується прочитати документацію по Selenium і документацію по PHPUnit. Далі ми підсумуємо основні принципи написання функціональних тестів у Yii:
Як і модульний тест, функціональний тест пишеться в класі
XyzTest, успадковує клас CWebTestCase, деXyz— імʼя класу, що підлягає тестуванню. Ми можемо використовувати всі методи класуPHPUnit_Extensions_SeleniumTestCase, бо він є предком класу CWebTestCase.Клас функціонального тесту зберігається у файлі з імʼям
XyzTest.php. За згодою, файл функціонального тесту може зберігатися в директоріїprotected/tests/functional.Основний вміст класу тесту — набір тестових методів з іменами
testAbc, деAbc— часто імʼя тестованої особливості. Наприклад, для тестування особливості входу користувача у нас є методtestLogin.Тестовий метод зазвичай містить послідовність виразів, які будуть командами перевірки для Selenium RC, що показує хід і результати тестування веб-додатка. У ньому також містяться вирази тверджень для перевірки, що веб-додаток відповідає саме так, як очікувалося.
Перед описом, як же писати функціональний тест, давайте глянемо файл WebTestCase.php,
згенерований командою yiic webapp. Цей файл визначає клас WebTestCase,
який може служити базовим для всіх класів функціональних тестів.
Клас WebTestCase в основному встановлює базовий URL тестованих сторінок.
Далі, в тестових методах, ми можемо використовувати відносні URL для визначення тестованих сторінок.
Ми також повинні звернути увагу, що згідно базового тестового URL у якості вхідної точки використовується
файл index-test.php замість файлу index.php. Єдина відмінність між сценаріями index-test.php і index.php те,
що у якості файлу конфігурації додатка перший використовує файл test.php, а другий — файл main.php.
Тепер ми опишемо, як протестувати функцію відображення запису демо-блога. Спочатку ми пишемо тестовий клас, як показано нижче. Зазначимо, що тестовий клас успадковує від базового класу, який ми тільки що описали:
Як і при написанні класу модульного тесту, ми оголошуємо фікстури для використання цим тестом. Тут ми показуємо,
що повинна використовуватися фікстура Post. У тестуючому методі testShow ми спочатку доручаємо
Selenium RC відкрити URL post/1. Зауважимо, що це відносний URL, а повний URL формується шляхом додавання
відносного до базового URL (тобто http://localhost/yii/demos/blog/index-test.php/post/1), який ми встановили в базовому класі.
Потім ми перевіряємо, що можемо знайти заголовок запису sample1 на даній сторінці.
І ми також перевіряємо, що сторінка містить текст Leave a comment.
Підказка: Перед запуском функціональних тестів запустіть сервер Selenium-RC. Зробити це можна командою
java -jar selenium-server.jar, виконаної із директорії, в яку встановлено Selenium.