Как стать автором
Обновить

Комментарии 40

Не хочу показаться навязчивым, но кат бы здесь не помешал…
А ведь бы ло же мнение… Когда писал коммент — катом даже и не пахло. Ну да ладно ))
>>В крупных конторах для этого есть специальные люди, которые занимаются тем, что пишут unit-тесты.
_очень_ спорное замечание
За что заминусовали человека?
Речь идет о модульных тестах, а не о каких-то других.
Модульные тесты должны писать те же программисты, которые пишут сам рабочий код, иначе в проекте будет полная каша.
Неужели про test-driven development никогда не слышали?
дык очевидно же =) привыкайте. Есть особо ранимые группы, в которых нельзя сделать замечание, даже по делу. Ну и всех кто не согласен — минусуют, без разбора.
Это всё описано в мануале к NetBeans, расскажите лучше о чем-нибудь посложнее :)
>Не для кого не секрет

Исправьте пожалуйста. Не -> Ни
Я не грамотей, но такие ошибки\опечатки глаз режут.
Вы ТОЧНО не грамотей.
НЛО прилетело и опубликовало эту надпись здесь
Блин, да. И Вы тоже:) А я неправ, почему-то ркшил, что речь о втором «не», а первое проглядел.

Прошу прощения.
а мне понравилось. просто и доступно. только покоробило umnojenie($a,$b) — если все остальное по английски, почему бы не написать mult($a,$b)?
потому что просто так вот повезло и по русски и по английски плюс и минус одинаково пишутся. Только вот правильнее было называть add и sub вместо plus и minus, ибо plus ну никак не переводится как сложить или сложение.
ну там же есть функция div вместо delenie… ну да это флуд оффтоп и флуд. спасибо за статью!
Да, на самом деле не плохо, спасибо, пользуюсь netbeans, а об этом не знал.
В крупных конторах для этого есть специальные люди, которые занимаются тем, что пишут…

спецификации. тесты это переложение спецификаций в программный код.
Согласитесь, если класс на 100 строк, то писать тесты на 200 строк кажется лишней тратой времени

Часто встречаются штуки, которые проще написать, чем описать. Кстати, пример калькулятора из их числа. :)
* @assert (15,0) == 0.
*/
public function div($a,$b)



/**
* Generated from @assert (15,0) == 0.
* @expectedException Exception
*/
public function testDiv4()

Вот это полная хрень. Если в спецификации написано «assert (15,0) == 0», значит функция div при аргументах 15 и 0 _обязана_ вернуть 0. И Netbeans генерировал правильный код теста. Но Вы, вместо того, чтобы исправить реализацию, всех обманули, переделав сам тест.

Условие неверных спецификаций не рассматриваем, по очевидным причинам.
На самом деле генерирует на основании моего кода.

Я в классе сделал так, что деление на 0 дает эксепшн. Вы если хотите возвращайте ноль.

@assert (15,0) == 0.
Это не вынуждает, я ожидал ексепшн. А он будет независимо от того что я жду: 0, 10 или 100.

Спасибо за то что прочитали статью
Гораздо лучше, когда тестирование прикручено к сайту. Что-то типо такого
ну с параметрами типа int всё ясно, а что делать не для Hello-world классов? Если там объект надо передать в метод?
Тут уже не подойодет походу такой способ.
К сожалению в PHPUnit 3.4 нельзя использовать _ (подчеркивание) в именах классов.
Это малость напрягает.
Приходится переименовывать тестовый файл, но тогда его не видит IDE при запуске из меню.
А версия 4.0 где это можно требует PHP 5.3.
Всё проще, в ночной сборке NetBeans есть возможность указать файл bootstrap, в котором уже можно разруливать __autoload по своему, подключаться к базе и выполнять прочие действия.

blogs.sun.com/netbeansphp/entry/recent_improvements_in_phpunit_support
Ну тогда будем ждать стабильного билда.\
Хотя как только я это заметил сразу написал тикет в поддержку. Мне ответили что это поведение юнита и ничего они с этим сделать не могут.
На данный момент мне проще использовать SimpleTest.
Спасибо за статью! Обычно пренебрегал такими тестами и все проверял руками. Начну внедрять это в свои проекты.
Очень хотел бы пример как тестить всякие формы и приложения с БД.
будет, но позже
Именно-именно то, что мне сейчас необходимо!
Огромное Вам программерское спасибище! =)
Отлично, спасибо!

По опыту, у Zend Studio время запуска одного теста составляет около 10-20 секунд, что очень много. А здесь как?

Добавил бы еще, что согласно идеологии TDD, подразумевается реализовывать не весь класс сразу, после чего запускать тестирование, но итеративно разрабатывать по методу, следуя мантре Green-Red-Refactor. Более того, сначала должны быть тесты, а затем реализация. Впрочем, вы о TDD и не говорили, это я так, к слову.
НЛО прилетело и опубликовало эту надпись здесь
Он у вас уже должен быть установлен через PEAR.
www.phpunit.de/manual/current/en/installation.html

После чего надо в Tools -> Options -> PHP в поле PHPUnit script прописать путь до phpunit.bat
( на пример D:\xampp\php\phpunit.bat ).

После чего можно начинать использовать. При первом запуске нетбинс предложит выбрать папку для тестовых файлов.
blogs.sun.com/netbeansphp/entry/phpunit_support_added
Да, именно так.

я не уделил внимание установке netbeans и phpunit так как полагаю, что человек который немного шарит веб не новичек за компом :)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Просто нужно было сделать pear upgrade --force PEAR ;)
Помогает.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Эх, всем хорош PHP в NetBeans, но отсутствие аналога Remote Systems в Eclipse для меня непреодолимое препятствие. Иначе давно бы перешёл, NetBeans и удобнее, и быстрее.
НЛО прилетело и опубликовало эту надпись здесь
UML: Tools->Plugins->Available Plugins
Извиняюсь за позднее зажигание, но может кто-то прикручивал юнит тестирование к codeigniter и подобным фреймворкам. Дело в том что у большинства фреймворков динамическая инициализация классов, то есть чтобы загрузить определенный класс модели мы пишем $this->load->model('your_model'). В тоже время в файле с классом модели мы не пишем include (или require) ('path/to/root_model_class');
В итоге при генерации тестовых классов phpunit ругается. Простое добавление инклуда проблему не решило. Глубоко ковыряться все руки недоходят. Может кто то уже решил данную проблему?
Возникла необходимость запускать юнит тесты на сервере, не покидая при этом NetBeans (работающую под Windows). Готового решения не нашел, поэтому опишу здесь свое — может, сэкономит кому-нибудь время.

1. Скачиваем putty, plink и pscp отсюда, кладем их в одну папку.
2. В putty сохраняем сессию, которая будет использоваться для подключения к серверу (назовем ее unitTestSsh).
3. Изменяем файл phpunit.bat

phpunit.bat
@echo off
cd C:\Path\To\Putty
plink unitTestSsh php /path/to/script/on/server/runRemotePhpUnit.php 
pscp unitTestSsh:/path/to/script/on/server/log.xml C:\Users\UserName\AppData\Local\Temp\nb-phpunit-log.xml
pscp unitTestSsh:/path/to/script/on/server/output.txt C:\Users\UserName\AppData\Local\Temp\nb-phpunit-output.txt
type C:\Users\UserName\AppData\Local\Temp\nb-phpunit-output.txt


4. Создаем скрипт runRemotePhpUnit.php на сервере

runRemotePhpUnit.php
$logFpath = dirname(__FILE__) . '/log.xml';
$outputFpath = dirname(__FILE__) . '/output.txt';
$bootstrapFpath = dirname(__FILE__) . '/bootstrap.php';
$unitTestsPath = dirname(__FILE__);
$remotePath = '/path/to/tests/on/server';
$localPath = 'C:/path/to/tests/on/localPc';

$output = shell_exec("phpunit --colors --log-junit $logFpath --bootstrap $bootstrapFpath $unitTestsPath");
$output = str_replace($remotePath, $localPath, $output);
file_put_contents($outputFpath, $output);

$log = file_get_contents($logFpath);
$log = str_replace($remotePath, $localPath, $log);
file_put_contents($logFpath, $log);



Кода не много, но поясню, что мы сделали.

При нажатии на кнопку «Test» NetBeans запускает файл phpunit.bat. Этот файл в свою очередь запускает утилиту phpunit, которая прогоняет тесты и записывает результат в xml-файл. NetBeans подхватывает xml-файл, парсит и выводит красочные результаты в окошке «Test Results».

Мы же заставили phpunit.bat запускать не локально установленную утилиту phpunit, а php-скрипт на сервере (при помощи plink). Этот php-скрипт запускает phpunit и сохраняет вывод в файл, предварительно обрабатывая его (заменяя пути). Далее наш phpunit.bat копирует xml-файл с сервера на локальную машину (с помощью pscp) и NetBeans его радостно подхватывает.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации