Вышла новая версия PHPUnit 10.0

Дата публикации: 2023-02-03
Просмотры: 792

Вышла новая версия PHPUnit 10.0.
Это версия работает только с PHP 8.1 и выше.
Это самый значительный релиз в истории проекта.
Произведена массовая очистка и рефакторинг, которые закладывают основу для дальнейшей разработки.

Вышла новая версия PHPUnit 10.0

Полный список изменений можно увидеть по этой ссылке.
Ниже рассмотрены наиболее важные изменение в проекте.

Несмотря на то, что вышла новая версия 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

Предыдущая статья:

Namespace для проекта на Unity3D

Следующая статья:

Zenject ломает сборку под WebGL
Поделиться статьей:

Комментарии:

Авторизуйтесь, для того, чтобы оставить комментарий. Войти на сайт
Подписка на новости
Узнавайте о новых статьях первыми.
Профиль