[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: (4) Тестирование PHPUnit
SlavaFr
После редыдущй темы ((3) Тестирование PHPUnit, PHPUnit первые шаги. ) мы знаем как работает тестирование посредством assert-функций, но на данный момент мы не протестировали не однй написанной нами функции или класса.
Так как тесты не являются функциональной частью вашей программы, то их надо организовать отдельно.
обычно создают папку с названием tests и пытаются организовать структуру папок наших тестов ткую же как и наша основная программа с ее библиотеками.
Например в папке tests/UnitTests/prog/clsasses/Geometry/DemenstionTest.php мы будем тестировать класс Demenstion который находится в /prog/clsasses/Geometry/Demenstion.php
Так делать не обязательно, но это один из простых методов потом быстро сориентироваться в структуре своих классов и тестов.

Для того, чтоб показать как работают тесты я создал у себя такую структуру:
1) папка LibForTest в которой я буду держать библиотеки и классы которые я хочу тестировать
2) папка tests в которой я буду держать тесты.
3) в папке tests создал папку PHPForumTests[B] и перенс в нее наши предыдущие тесты.

[B]Теперь все тесты я будут из удобства вызываться только из папки tests




Как сделать наши функции и классы видемыми для PHPUnita?
Конечно мы можем сделать в коде UnitTest-Класса include_once но эта зависимость нам абсолютно не нужна!!!
Мы создаем обычный скрипт который стартует наш основной процесс autoload , а также производит нужные инициализации нашей системы. Такой скрипт называется bootstrap.
Я для нашего создал маленький bootsrap для инициализации и автолодинга. Классы будут автоматически искаться по принципу
(Если класс Называется Xxx_Yyy_XyName или \Xxx\Yyy\XyName, то aвтолодер ищет его в файле Xxx/Yyy/XyName.php).
tests/bootstrap.php

<?php
//чтоб менять папку в случае изменения позиции библиотеки
define('LIB_FOLDER','../LibForTest/');//если phpunit вызываетсай не из этой папки, то абсолютный путь
spl_autoload_register('autoload_for_lib');
function autoload_for_lib($class){
if (!class_exists($class,false)) {
$file =LIB_FOLDER. str_replace(array('\\','_'),'/',$class) . '.php';
if (file_exists($file)) {
require_once($file);
}
}
}



Если вы теперь вызовите phpunit с опцией --bootstrap="bootstrap.php" то в наших тест-классах будет работать автолоад.

Советую просто посмотреть все опции которые имеются в phpunit.
Вызовите с командной стрoки : phpunit -h



$>phpunit -h
PHPUnit 3.7.10 by Sebastian Bergmann.

Usage: phpunit [switches] UnitTest [UnitTest.php]
phpunit [switches] <directory>

--log-junit <file> Log test execution in JUnit XML format to file.
--log-tap <file> Log test execution in TAP format to file.
--log-json <file> Log test execution in JSON format.

--coverage-clover <file> Generate code coverage report in Clover XML format.
--coverage-html <dir> Generate code coverage report in HTML format.
--coverage-php <file> Serialize PHP_CodeCoverage object to file.
--coverage-text=<file> Generate code coverage report in text format.
Default to writing to the standard output.

--testdox-html <file> Write agile documentation in HTML format to file.
--testdox-text <file> Write agile documentation in Text format to file.

--filter <pattern> Filter which tests to run.
--testsuite <pattern> Filter which testsuite to run.
--group ... Only runs tests from the specified group(s).
--exclude-group ... Exclude tests from the specified group(s).
--list-groups List available test groups.
--test-suffix ... Only search for test in files with specified
suffix(es). Default: Test.php,.phpt

--loader <loader> TestSuiteLoader implementation to use.
--printer <printer> TestSuiteListener implementation to use.
--repeat <times> Runs the test(s) repeatedly.

--tap Report test execution progress in TAP format.
--testdox Report test execution progress in TestDox format.

--colors Use colors in output.
--stderr Write to STDERR instead of STDOUT.
--stop-on-error Stop execution upon first error.
--stop-on-failure Stop execution upon first error or failure.
--stop-on-skipped Stop execution upon first skipped test.
--stop-on-incomplete Stop execution upon first incomplete test.
--strict Run tests in strict mode.
-v|--verbose Output more verbose information.
--debug Display debugging information during test execution.


--process-isolation Run each test in a separate PHP process.
--no-globals-backup Do not backup and restore $GLOBALS for each test.
--static-backup Backup and restore static attributes for each test.

--bootstrap <file> A "bootstrap" PHP file that is run before the tests.

-c|--configuration <file> Read configuration from XML file.
--no-configuration Ignore default configuration file (phpunit.xml).
--include-path <path(s)> Prepend PHP's include_path with given path(s).
-d key[=value] Sets a php.ini value.

-h|--help Prints this usage information.
--version Prints the version and exits.


Комментарии к опциям довольно понятны и в случае недостаточно хорошего знания английского легко переводятся например в google
( http://translate.google.com/#en/ru/). Я признаюсь честно, что я все опции не перепробовал но этих опций достаточно, чтоб произвести довольно гибко настройки связанные с phpunit прямо на командной строке.
Если у вас есть вопросы по опциям, то задавайте вопросы. Будем разбираться.

Настройки связанные с тестом, могут иметь большое количество опций, вызов phpunit может быть довольно сложным. Ковыряться в опциях на уровне командной строки не предоставляет большого удовльствия особенно когда нужно делать изменения.
Благодоря тому, что настройки можно держать в xml-файле все упрощается. Если вы в папке из которой вызываете phpunit создадите файл с именем phpunit.xml, то phpunit попытается автоматически парсить его как конфигурацию. Если по какимто причинам вы не хотите, чтоб этот файл рассматривался как конфигурация, то вы можете вызвать phpunit с опцией --no-configuration. Если вы хотите
использовать конфигурацию из другого файла, то вызывайте phpunit с опцией --configuration=путь_к_конфигурации.xml

создаем в нашей папке tests новую и простенькую конфигурацию
tests/phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit

backupStaticAttributes="true"
bootstrap="./bootstrap.php"
>
<testsuites
name="Suites">
<testsuite
name="PHPForum">
<directory>
./PHPForumTests</directory>
</testsuite>
</testsuites>
</phpunit>


Teперь вызвав из папки tests команду phpunit нам не нужно больше употреблять параметры указывать где находится bootstrap и где находятся наши тесты. Phpunit автоматически парсит phpunit.xml из папки вызова и сделав нужные конфигурации, выполнит все тесты из нашей папки PHPForumTests которые находятся в файлах с именем оканчивающимся на "Test.php".

Возможные настройки phpunit.xml : http://www.phpunit.de/manual/current/en/ap...figuration.html

Для того, чтоб упростить первый реальный тест, я создал парочку классов Geometry\Dimension и Geometry\Dimension2D , а также написал первый реальный тест для этих классов tests/PHPForumTests/LibForTest/Geometry/Dimension2DTest.php
(смотри в прикрепленный архив)

Распакуйте архив, зайдите в папку tests и вызовите с командной строки phpunit.

======
продолжение http://phpforum.ru/index.php?showtopic=73136
предыдущая тама http://phpforum.ru/index.php?showtopic=71385

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.