Я хотел бы выполнить модульный тест на файл библиотеки функций...
то есть, у меня нет класса, это - просто файл с функциями помощника в нем...
например, я создал php проект в ~/www/test
и файл ~/www/test/lib/format.php
<?php
function toUpper( $text ) {
return strtoupper( $text );
}
function toLower( $text ) {
return strtolower( $text );
}
function toProper( $text ) {
return toUpper( substr( $text, 0, 1 ) ) . toLower( substr( $text, 1) );
}
?>
инструменты-> создают тесты PHPUnit, дает мне следующую ошибку:
PHPUnit 3.4.5 Sebastian Bergmann.
Не удалось найти класс "форматом" в "/home/sas/www/test/lib/format.php".
теперь, если я кодирую (вручную!) файл ~/www/test/tests/lib/FormatTest.php
<?php
require_once 'PHPUnit/Framework.php';
require_once dirname(__FILE__).'/../../lib/format.php';
class FormatTest extends PHPUnit_Framework_TestCase {
protected function setUp() {}
protected function tearDown() {}
public function testToProper() {
$this->assertEquals(
'Sebastian',
toProper( 'sebastian' )
);
}
}
?>
это хорошо работает, я могу выполнить его...
но если я выбираю тестовый файл из format.php, я добираюсь
Тестовый файл для выбранного исходного файла не был найден
какая-либо идея?
saludos
SAS
PS: другой вопрос, там способ обновить сгенерированные тесты, не имея необходимость вручную удалять их???
ps2: использование netbeans 2.8 dev
Как вы написали тестовый корпус, на 100% правильно. Проблема заключается в общей конвенции и как phpunit и NetBeans полагаются на них.
Наилучшая практика в наши дни - написать весь свой код в объекте ориентированным образом. Таким образом, вместо того, чтобы файл PHP, полный функций утилиты, как у вас, вы обертываете эти функции в класс и имеете их в качестве статических функций. Вот пример, используя ваш код выше,
<?php
class Format
{
public static function toUpper($text)
{
return strtoupper($text);
}
public static function toLower($text)
{
return strtolower($text);
}
public static function toProper($text)
{
return self::toUpper(substr($text, 0, 1 )) . self::toLower(substr($text, 1));
}
}
, который вы должны использовать свои функции, такие как
Format::toProper('something');
PhPUnit, а NetBeans, зависят от этой объектной ориентированной философии. Когда вы пытаетесь автоматически генерировать тестовый корпус phpunit, phpunit смотрит в ваш файл для класса. Затем он создает тестовый случай, основанный на этом классе, и это общедоступное API, и называет его Classnametest
, где классное значение
- это имя класса, протестированного.
NeatBeans также следует за этой конвенцией и знает, что Classnametest
- это тестовый случай PhPunit для
, поэтому создает связь между двумя в IDE.
Итак, мой совет - всегда использовать классы, где вы можете. Если у вас есть коммунальные функции, которые не зависят от ничего, и используются глобально, делают их статическими.
Сбочная Примечание: Я бы избавился от своих двух функций TOUPPER ()
и TOLOWER ()
. Нет необходимости обернуть встроенные функции PHP, когда нет необходимости. Также нет необходимости проверять их, так как они тщательно проверены.
Отметить сайт 2: Существует вроде встроенного PHP, эквивалентна вашей функции TOPPER ()
, называется uCFirst ()
.