Вышла новая версия PHPUnit 10.0
Вышла новая версия PHPUnit 10.0.
Это версия работает только с PHP 8.1 и выше.
Это самый значительный релиз в истории проекта.
Произведена массовая очистка и рефакторинг, которые закладывают основу для дальнейшей разработки.
Полный список изменений можно увидеть по этой ссылке.
Ниже рассмотрены наиболее важные изменение в проекте.
Несмотря на то, что вышла новая версия PHPUnit 10, старые версии все равно будут так же работать. Так что спешить с обновлением не обязательно.
Все что было помечено как устаревшая функциональность в PHPUnit 9 была удалена.
Система событий
Предыдущие версии PHPUnit предоставляли TestListener
интерфейс, а также TestHook
интерфейсы для разработчиков расширений для запуска тестов PHPUnit.
В новой версии PHPUnit 10 эти интерфейсы заменены на систему событий. Теперь все основано на событиях.
Для этого был переписан практически весь внутренний код на систему событий.
Система событий доступна только для чтения.
Разработчики могут писать расширения для запуска тестов PHPUnit и подписываться на события.
Результаты теста и проблемы с тестом
В PHPUnit 10 теперь есть четкое разделение результата теста с ошибками и проблемами в самом тесте.
Показанный ниже пример тригерит E_USER_NOTICE
во время выполнения теста:
final class Example
{
public function doSomething(): bool
{
// ...
trigger_error('message', E_USER_NOTICE);
// ...
return false;
}
}
use PHPUnit\Framework\TestCase;
final class ExampleTest extends TestCase
{
public function testSomething(): void
{
$example = new Example;
$this->assertTrue($example->doSomething());
}
public function testSomethingElse(): void
{
$example = new Example;
$this->assertFalse($example->doSomething());
}
}
PHPUnit 10 не конвертирует E_USER_NOTICE
в исключение, поэтому выполнение теста не прерывается.
А в PHPUnit 9 преобразует E_USER_NOTICE
в исключение, и выполнение теста прервется.
Метаданные
В PHPUnit 10 представлена поддержка атрибутов PHP 8 для добавления метаданных.
Но так же осталась и поддержка старого формата с аннотациями.
Пример с аттрибутами:
namespace vendor\project;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
#[CoversClass(Example::class)]
final class ExampleTest extends TestCase
{
#[DataProvider('provider')]
public function testSomething(string $expected, string $input): void
{
$example = new Example;
$this->assertSame(
$expected,
$example->doSomething($input)
);
}
public static function provider(): array
{
return [['foo', 'bar']];
}
}
Пример с аннотациями:
namespace vendor\project;
use PHPUnit\Framework\TestCase;
/** @covers \vendor\project\Example */
final class ExampleTest extends TestCase
{
/** @dataProvider provider */
public function testSomething(string $expected, string $input): void
{
$example = new Example;
$this->assertSame(
$expected,
$example->doSomething($input)
);
}
public static function provider(): array
{
return [['foo', 'bar']];
}
}
Ссылка на источник и полную статью: https://phpunit.de/announcements/phpunit-10.html