Тестування визначення фікстур, the definitive guide to yii, yii php framework
Автоматичні тести необхідно виконувати неодноразово. Ми хотіли б виконувати тести в деяких відомих станах для гарантії повторюваності процесу тестування. Ці стани називаються фікстура. Наприклад, для тестування функції створення запису в додатку блога, кожен раз, коли ми виконуємо тести, таблиці, що зберігають відповідні дані про записи (наприклад, таблиці Post. Comment), повинні бути відновлені до деякого фіксованим станом. Документація по PHPUnit добре описує основну установку фікстур. В основному в цьому розділі ми описуємо установку фікстур бази даних так, як ми тільки що описали в прикладі.
Установка фікстур бази даних є, напевно, однією з найбільш тривалих частин в тестуванні заснованих на БД веб-додатків. Yii вводить компонент додатка CDbFixtureManager для полегшення цієї проблеми. В основному він робить такі речі при виконанні ряду тестів:
- Перед виконанням усіх тестів скидає все таблиці, що відносяться до тестів до деякого відомому стану.
- Перед виконанням окремого тестового методу скидає певні таблиці до деякого відомому стану.
- Під час виконання тестового методу забезпечує доступ до рядків даних, які вносяться до фікстур.
Для використання компонента CDbFixtureManager. ми налаштовуємо його в конфігурації програми наступним чином:
Далі ми зберігаємо дані фікстура в директорії protected / tests / fixtures. Ця директорія може бути налаштована властивістю CDbFixtureManager :: basePath конфігурації програми. Дані фікстур організовані як колекція PHP-файлів, які називаються файлами фікстур. Кожен файл фікстура повертає масив, що представляє початкові рядки даних для конкретної таблиці. Файл - таке ж, як назва таблиці. Нижче наведено приклад даних фікстура для таблиці Post. збереженої у файлі Post.php:
Як бачимо, в коді вище повертаються 2 рядки даних. Кожен рядок представлена у вигляді асоціативного масиву, ключі якого - це імена стовпців, а значення - значення відповідних стовпців. Крім того, кожен рядок індексована рядком (наприклад sample1. Sample2), яку називають псевдонім рядки. Пізніше, коли ми пишемо тестові скрипти, ми можемо легко звертатися до рядка по її псевдоніму. Ми опишемо це докладно в наступному розділі.
Ви могли помітити, що ми не визначаємо значення стовпця id в коді фікстура вище. Це тому, що стовпець id - автоінкрементний первинний ключ, значення якого буде заповнено при вставці нових рядків.
При першому зверненні до компоненту CDbFixtureManager він буде переглядати кожен файл фікстура і використовувати його для скидання відповідної таблиці. Він скидає таблицю, очищаючи її, скидаючи значення первинного ключа, і потім вставляючи рядки даних з файлу фікстура в таблицю.
Іноді ми не хочемо скидати кожну таблицю, що має файл фікстура, перш, ніж ми виконаємо ряд тестів, тому що скидання занадто багатьох файлів фікстур може зайняти тривалий час. У цьому випадку, ми можемо написати PHP-скрипт для можливості налаштування роботи ініціалізації. PHP-скрипт повинен бути збережений у файлі init.php в тій же директорії, що і файли фікстур. Коли компонент CDbFixtureManager виявить цей скрипт, він виконає цей скрипт замість того, щоб скидати кожну таблицю.
Також можливо, що нам не подобається спосіб скидання таблиці за замовчуванням, тобто, очищення таблиці повністю і вставка даних фікстура. Якщо справа йде так, ми можемо написати скрипт ініціалізації для певного файлу фікстура. Скрипт повинен мати ім'я, на початку якого йде ім'я таблиці, а далі - .init.php. Наприклад, скрипт ініціалізації для таблиці Post названий був Post.init.php. Коли компонент CDbFixtureManager побачить цей скрипт, він виконає скрипт замість того, щоб використовувати значення скидання таблиці за замовчуванням.
У наступних двох розділах ми опишемо, як використовувати фікстура, якими управляє компонент CDbFixtureManager. в модульних і функціональних тестах.