То, как вы написали свой тестовый блок, на 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
, где ClassName
- имя тестируемого класса.
Neatbeans также следует этому соглашению и знает, что ClassNameTest
является тестовым примером PHPUnit для ClassName
, поэтому создает связь между ними в IDE.
Итак, мой совет - всегда использовать классы, где вы можете. Если у вас есть служебные функции, которые ни от чего не зависят и используются глобально, сделайте их статическими.
Примечание: Я бы избавился от ваших двух функций toUpper()
и toLower()
. Там нет необходимости оборачивать встроенные функции PHP, когда в этом нет необходимости. Также нет необходимости проверять их, так как они тщательно проверены.
Примечание к сайту 2: Существует своего рода встроенный в PHP эквивалент вашей функции toProper()
, называемый ucfirst()
.