links for 2008-08-31 Google Chrome: Още един браузър … ох
Sep 01

Днес(т.е. на 27, просто от тогава този пост седи във draft-a) прочетох това:

Database helper for PHPUnit

Във него се показва интересен метод за работа със PHPUnit и тестване на база данни. Този пост, ме “вдъхнови” и мен да споделя, как аз работя със PHPUnit.
Първо директорийната структура. В една папка тест имам следните неща:

  • benchmarks/ - съдържа различни benchmark тестове ( за тях някои друг път по-подробно)
  • fixtures/ - fixtures на тестовете
  • reports/ - code coverage докладите на xdebug
  • unit/ - самите unit тестове
  • enviroment.php - различни настройки

Под папките на unit, отговарят на разлините testcase -ове. Например testcase за ActiveRecord::Relations::Many се намира в unit/ActiveRecord/Relations/ActiveRecordRelationManyTest.php. Това което е по-интересно в случая е, че в повечето папките имам един файл: setup.php този файл се изпълнява преди тестовете от съответния testcase да се активират. Идеята му е се заредят класовете, файловете, да се изчисти базата данни преди тестване.

За тестове съм си направил едни клас Test_TestCase който наследява PHPUnit_Framework_TestCase и в него съм си добавил няколко помощни метода за тестване.

И накрая имам един клас Test_Runner който стартира тестовете. Кода на Test_Runner може да намерите тук.

Кода се използва така:


// константите DS и TESTS_DIR се използват при инициализация на Test_Runner
define('DS', DIRECTORY_SEPARATOR);
define('TESTS_DIR',  		ROOT_DIR . DS . 'test' . DS . 'unit');

$r = new Test_Runner();
$r->run($options);

Също така използвам и 2-3 php скриптчета за генериране на скелета за тест класа, директориите, setup.php файловете и други.

По принцип, не харесвам много PHPUnit, но за нещастие няма за сега по-добро нещо за тестове в PHP света, до колкото знам. A и ако добре се документира и структурира тест кода, нещата стават доста по-поносими.

Ако някои има идеи и съвети за PHPUnit или тестването като цяло, да се чувства поканен да остави коментар :)

2 Responses to “PHP Unit testing”

  1. Калоян К. Цветков Says:

    Е, дали няма по-добро е спорно … аз продължавам упорито да ползвам SimpleTest, въпреки че последните години май няма никакво развитие там, докато PHPUnit дърпа напред всеки месец. После примерно хората които започват със Zend Framework, първо се “сблъскват” с PHPUnit ;) Не че разликите са големи де ;)

  2. Radoslav Stankov Says:

    То преди да избера PHPUnit прегледах SimpleTest и нещо което се опитваше да копира RSpec за PHP, но PHPUnit си личи че е по-често обновяван продукт. А и когато пускам тестовете си, скоростта не е от такова значение, каквато е при самите приложения.

Leave a Reply

  • Enter this code