mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-06 08:14:21 +01:00
104 lines
6.1 KiB
Plaintext
104 lines
6.1 KiB
Plaintext
Функциональное тестирование
|
||
===========================
|
||
|
||
Перед прочтением даного раздела рекомендуется прочитать
|
||
[документацию по Selenium](http://seleniumhq.org/docs/) и
|
||
[документацию по PHPUnit](http://www.phpunit.de/wiki/Documentation). Дальше мы
|
||
подытожим основные принципы написания функциональных тестов в Yii:
|
||
|
||
* Как и модульный тест, функциональный тест пишется в классе `XyzTest`,
|
||
наследующего класс [CWebTestCase], где `Xyz` — имя класса, подлежащего
|
||
тестированию. Мы можем использовать все методы класса
|
||
`PHPUnit_Extensions_SeleniumTestCase`, потому что он является предком класса
|
||
[CWebTestCase].
|
||
|
||
* Класс функционального теста сохраняется в файле с именем `XyzTest.php`. По
|
||
соглашению, файл функционального теста может храниться в директории
|
||
`protected/tests/functional`.
|
||
|
||
* Основное содержимое класса теста — набор тестовых методов с именами
|
||
`testAbc`, где `Abc` — часто имя тестируемой особенности. Например, для
|
||
тестирования особенности входа пользователя у нас есть метод `testLogin`.
|
||
|
||
* Тестовый метод обычно содержит поледовательность выражений, которые будут
|
||
являться командами проверки для Selenium RC, показывающей ход и результаты
|
||
тестирования веб-приложения. В нем также содержатся выражения утверждений для
|
||
проверки, что веб-приложение отвечает именно так, как ожидалось.
|
||
|
||
Перед описанием, как же писать функциональный тест, давайте глянем файл
|
||
`WebTestCase.php`, сгенерированный командой `yiic webapp`. Этот файл определяет
|
||
класс `WebTestCase`, который может служить базовым для всех классов
|
||
функциональных тестов.
|
||
|
||
~~~
|
||
[php]
|
||
define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
|
||
|
||
class WebTestCase extends CWebTestCase
|
||
{
|
||
/**
|
||
* Метод выполняется перед запуском теста.
|
||
* В основном, устанавливает базовый URL тестируемого приложения.
|
||
*/
|
||
protected function setUp()
|
||
{
|
||
parent::setUp();
|
||
$this->setBrowserUrl(TEST_BASE_URL);
|
||
}
|
||
|
||
…
|
||
}
|
||
~~~
|
||
|
||
Класс `WebTestCase` в основном устанавливает базовый URL тестируемых страниц.
|
||
Далее, в тестовых методах, мы можем использовать относительные URL для
|
||
определения тестируемых страниц.
|
||
|
||
Мы также должны обратить внимание, что согласно базового тестового URL в
|
||
качестве входной точки используется файл `index-test.php` вместо файла
|
||
`index.php`. Единственное различие между сценариями `index-test.php` и
|
||
`index.php` то, что в качестве файла конфигурации приложения первый использует
|
||
файл `test.php`, а второй — файл `main.php`.
|
||
|
||
Теперь мы опишем, как протестировать функцию отображения записи
|
||
[демо-блоге](http://www.yiiframework.com/demos/blog). Сначала мы пишем тестовый
|
||
класс, как показано ниже. Отметим, что тестовый класс наследует от базового
|
||
класса, который мы только что описали:
|
||
|
||
~~~
|
||
[php]
|
||
class PostTest extends WebTestCase
|
||
{
|
||
public $fixtures=array(
|
||
'posts'=>'Post',
|
||
);
|
||
|
||
public function testShow()
|
||
{
|
||
$this->open('post/1');
|
||
// проверяем наличие заголовка некой записи
|
||
$this->assertTextPresent($this->posts['sample1']['title']);
|
||
// проверяем наличие формы комментария
|
||
$this->assertTextPresent('Leave a Comment');
|
||
}
|
||
|
||
…
|
||
}
|
||
~~~
|
||
|
||
Как и при написании класса модульного теста, мы объявляем фикстуры для
|
||
использования этим тестом. Здесь мы показываем, что должна использоваться
|
||
фикстура `Post`. В тестирующем методе `testShow` мы сначала поручаем
|
||
`Selenium RC` открыть URL `post/1`. Заметим, что это относительный URL, а
|
||
полный URL формируется путем добавления относительного к базовому URL (т.е.
|
||
`http://localhost/yii/demos/blog/index-test.php/post/1`), который мы установили
|
||
в базовом классе. Затем мы проверяем, что можем найти заголовок записи
|
||
`sample1` на данной странице. И мы также проверяем, что страница содержит текст
|
||
`Оставить комментарий`.
|
||
|
||
|
||
> Tip|Подсказка: Перед запуском функциональных тестов запустите сервер Selenium-RC.
|
||
> Сделать это можно командой `java -jar selenium-server.jar`, выполненной в
|
||
> директории, в которую установлен Selenium.
|
||
|
||
<div class="revision">$Id: test.functional.txt 1662 2010-01-04 19:15:10Z qiang.xue $</div> |