Поскольку PHPUnit является производным от xUnit, и именно так xUnit делает это.
Почему xUnit делает это так? Я рад, что ты спросил. Первоначальная причина, как указывает Роберт, заключается в том, что xUnit происходит от Smalltalk и популяризируется JUnit на Java. Оба являются языками с нулевым или нулевым уровнем, поэтому у них не было выбора.
Это не значит, что нет других преимуществ. ОО тесты могут быть унаследованы. Это означает, что если вы хотите протестировать подкласс, вы можете запустить все родительские тесты и просто переопределить несколько тестовых методов для поведения, которое вы изменили. Это дает вам превосходное покрытие подклассов без дублирования тестового кода.
Его легко добавлять и переопределять методы assert в PHPUnit. Просто создайте подкласс PHPUnit_Framework_TestCase
, напишите свои собственные assert
методы, и ваши тестовые классы наследуют от вашего нового подкласса. Вы также можете написать методы по умолчанию setup
и teardown
.
Наконец, это гарантирует, что методы тестовой среды не будут конфликтовать с тем, что они тестируют. Если тестовый фреймворк просто выбросил свои функции в тест, и вы хотите протестировать что-то с setup
методом ... ну, у вас проблемы.
Тем не менее, я слышу вашу боль. Большой тестовый фреймворк может быть раздражающим, громоздким и ломким. Perl не использует стиль xUnit, он использует процедурный стиль с короткими именами тестовых функций. См. Test :: More для примера. За кулисами он делает именно то, что вы предложили, есть объект экземпляра одиночного теста, который используют все функции. Есть также гибридные процедурные функции утверждения с модулем методов тестирования OO под названием Test :: Class , который делает лучшее из обоих миров.
Учитывая, что синтаксис PHP настолько уродлив для вызова методов
Полагаю, вам не нравится ->
. Я предлагаю вам научиться жить с этим. OO PHP намного лучше, чем альтернатива.