Ниже приведён код теста
Continue reading »
Навеяно http://habrahabr.ru/blogs/webdev/70903/ – много чего идеологически взято оттуда.
Но код там написан неудобно для меня, поэтому написал свой класс (3 класса) для фильтрации пользовательского контента.
Делает следующее: вырезает все неразрешённые теги, в разрешённых при этом удаляет все неразрешённые атрибуты.
После этого для всех ссылок на сторонние сайты проставляет атрибут target=»_blank». После этого проверяет все атрибуты всех тегов, где может встречаться ссылка (img src, к примеру) и если протокола нет среди разрешённых (используется parse_url), добавляется http://.
Работает небыстро.
Использовать при публиковании.
TagsStripper – здесь все классы
index – пример использования
TestTagsStripper – тесты
Иногда бывает так, что у PHP по каким-то причинам нет доступа к интернету (NTLM-авторизация, блин(().
Тогда придётся ставить всё вручную.
В принципе, процесс установки описан на официальном сайте, но неправильно.
Действовать можно так:
1.Скачать последнюю стабильную версию PHPUnit (при написании заметки была скачана версия PHPUnit-3.4.0).
2. Разархивировать и скопировать содержимое папки PHPUnit-3.4.0 в папку путь-к-php\PEAR.
3. Изменить файл путь-к-php\PEAR\phpuint.bat:
Было
set PHPBIN="@php_bin@" %PHPBIN% "@bin_dir@\phpunit" %*
Стало
set PHPBIN="путь-к-php\php" %PHPBIN% ""путь-к-php\PEAR\phpunit.php" %*
Собственно, всё.
Сначала устанавливаем PEAR.
Далее нужно зарегистрировать канал PHPUnit
путь-к-php\pear channel-discover pear.phpunit.de
Теперь можно установить PHPUnit
путь-к-php\pear install phpunit/PHPUnit
При этом может поругаться на версию PEAR. Надо обновить – см. заметку по установке PEAR.
Если не получилось установить с помощью PEAR.
После этого нужно писать тесты.
Подойдёт что-то вроде
ModelAdv.php
<?
//инициализация - можно вынести в отдельный файл
$_SERVER['HTTP_HOST'] = 'my_project';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['QUERY_STRING'] = '';
//возникают ошибки, т.к. не все серверные переменные установлены
ini_set('display_errors','off');
error_reporting(E_ERROR);
require_once ('S:/wamp/www/moikompas/htdocs/init.php');
ini_set('display_errors','on');
error_reporting(E_ALL);
ini_set('include_path', ini_get('include_path') . ';путь-к-проекту;путь-к-PEAR;.');
require_once 'PHPUnit/Framework.php';
echo "--started--\n";
//--инициализация
/*
//это для тестирования контроллера - для задания всех его свойств
cfg::init('/groups/test/');
//здесь идёт передача управления контроллеру.
//вывод нам не нужен
ob_start();
require_once ('htdocs/index.php');
ob_clean();*/
//загружаем тестируемый класс (если нет автозагрузки)
load::c('adv');
//собственно сами тесты
class AdvTest extends PHPUnit_Framework_TestCase
{
public function test_renderOpenxBannerOnPage()
{
$params =
array
(
array
(//всё правильно
'in' => array ('category' => 'biznes', 'place' => 'modules_top'),
'out' => array ('zoneid' => 74, 'n' => 'a1ebea39')
),
array
(//всё правильно - вернуть умолчание
'in' => array ('category' => 'biznes', 'place' => 'modules_middle'),
'out' => array ('zoneid' => 2, 'n' => 'a159618f')
),
array
(//неверная категория - вернуть умолчание
'in' => array ('category' => 'biznes1', 'place' => 'modules_top'),
'out' => array ('zoneid' => 73, 'n' => 'ae343b6d')
),
array
(//неверное место показа - вернуть ''
'in' => array ('category' => 'biznes', 'place' => 'modules_to'),
'out' => ''
),
array
(//неверная категория и место показа - вернуть ''
'in' => array ('category' => 'biznes12', 'place' => 'modules_to'),
'out' => ''
),
);
foreach ($params as $par)
{
$out = adv::renderOpenxBannerOnPage($par['in']['category'], $par['in']['place'], true);
$this->assertEquals($out, $par['out']);
}
}
public function test_renderOpenxBannerByParams()
{
$params =
array
(
array
(//всё правильно
'in' => array ('bannerpage' => 'compas', 'place' => 'top', 'category' => 'biznes'),
'out' => array ('zoneid' => 45, 'n' => 'ae7d79d4')
),
array
(//всё правильно
'in' => array ('bannerpage' => 'compas', 'place' => 'right', 'category' => 'razvlecheniya'),
'out' => array ('zoneid' => 29, 'n' => 'a14675ed')
),
array
(//всё правильно
'in' => array ('bannerpage' => 'index', 'place' => 'right', 'category' => null),
'out' => array ('zoneid' => 7, 'n' => 'a2a070c5')
),
array
(//всё правильно - вернуть умолчание
'in' => array ('bannerpage' => 'index', 'place' => 'top', 'category' => 'biznes'),
'out' => array ('zoneid' => 5, 'n' => 'abff2e70')
),
array
(//страница компаса, неверная категория - вернуть умолчание
'in' => array ('bannerpage' => 'compas', 'place' => 'top', 'category' => ''),
'out' => array ('zoneid' => 44, 'n' => 'abf29464')
),
array
(//неверное место показа - вернуть ''
'in' => array ('bannerpage' => 'index', 'place' => '', 'category' => 'biznes'),
'out' => ''
),
);
foreach ($params as $par)
{
$out = adv::renderOpenxBannerByParams($par['in']['bannerpage'], $par['in']['place'], $par['in']['category'], true);
//var_dump($out);
$this->assertEquals($par['out'], $out);
}
}
}
?>
Запускать из папки с исполняемыми файлами php (где php.exe):
phpunit.bat путь-к-папке-tests\ModelAdv.php
Ссылки по теме:
документация по установке,
документация по написанию тестов,
phpUnderControl (зачем?)
Установка PHPUnit производится через PEAR (Описание на англ.).
Главное дальше – это научить систему работать не только (а лучше – совсем не) с серверными переменными вроде $_SERVER['REQUEST_URI'], а с переданными урлами (чтобы эмулировать обращение к конкретной странице).
В рассматриваемом конкретном случае предполагается в начале каждого теста подгружать файл TestInit.php.
Листинг1. TestInit.php
<?
$_SERVER['HTTP_HOST'] = 'хост';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['QUERY_STRING'] = '';
//возникают ошибки, т.к. не все серверные переменные установлены
ini_set('display_errors','off');
error_reporting(E_ERROR);
require_once ('абсолютный-путь-к-рут-сайта/htdocs/init.php');
ini_set('display_errors','on');
error_reporting(E_ALL);
ini_set('include_path', ini_get('include_path')
. ';абсолютный-путь-к-рут-сайта;абсолютный-путь-к-PEAR;.');
require_once 'PHPUnit/Framework.php';
echo "--started--\n";
?>
Проблема – отключить вывод из шаблонов (система была сделана слишком прямолинейной – нет единого центра управления выводом).
Запуск получается следующий:
C:\wamp\php5\PEAR>pear-phpunit.bat C:\wamp\www\moikompas\tests\ModelGroup.php
ССылки
Написание тестов – страницы PHPUnit Manual
Автоматизированное тестирование ZendFramework-приложений (manual)