Новое в Symfony 4.4: PHPUnit Polyfills

Компонент PHPUnit Bridge улучшает исходную библиотеку PHPUnit с помощью утилит, сообщающих об использовании устаревшего кода и помощников для мока собственных функций, связанными со временем, DNS и существованием классов.

При тестировании некоторого кода, который должен быть совместим с несколькими версиями PHP, трудно выбрать версию PHPUnit: последние версии, такие как PHPUnit 8, используют функции, несовместимые с PHP 5.5, и удаляют методы, доступные в более ранних версиях PHPUnit. Кроме того, PHPUnit 6 переключился на классы пространства имен, поэтому тесты должны работать с пространствами имен и без них.

Вот почему в Symfony 4.4 улучшили PHPUnit Bridge с несколькими полифиллами, которые позволяют создавать тесты, совместимые с несколькими версиями PHPUnit.

Polyfills для недоступных методов

При использовании скрипта simple-phpunit, предоставляемого PHPUnit Bridge, вместо скрипта phpunit, предоставляемого PHPUnit, Symfony внедряет полифилы для большинства новых методов классов TestCase и Assert.

Другими словами, вы можете начать использовать новые методы в наборах тестов, которые не совместимы с новыми версиями PHPUnit, такие как wellException(), assertStringContainsString() и т. д.

Удаление типа возврата Void

При запуске скрипта simple-phpunit с переменной окружения SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT, установленной в 1, PHPUnit Bridge изменит код PHPUnit для удаления возвращаемого типа void (введенного в PHPUnit 8) из setUp(), tearDown(), setUpBeforeClass() и tearDownAfterClass()методы. Это позволяет вам написать тесты, совместимы как с PHP 5, так и с PHPUnit 8.

Кроме того, вы можете использовать trait SetUpTearDownTrait в своем тестовом классе, чтобы внедрить методы без возвращаемого типа void.

Пространства имен PHPUnit Classes

PHPUnit Bridge добавляет псевдонимы классов пространства имен для большинства классов PHPUnit, объявленных без пространств имен (например, PHPUnit_Framework_Assert), позволяя вам всегда использовать объявление класса пространств имен, даже когда тест выполняется с PHPUnit 4, где пространства имен не используются.