протестируйте функции php (не классы) с netbeans и PHPUnit

Я хотел бы выполнить модульный тест на файл библиотеки функций...

то есть, у меня нет класса, это - просто файл с функциями помощника в нем...

например, я создал 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

6
задан opensas 25 December 2009 в 19:59
поделиться

1 ответ

Как вы написали тестовый корпус, на 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 () .

5
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: