Советы по тестированию исключений PHP

Давайте посмотрим на такой совершенно простой пример, как этот:

<?PHP

namespace App;

class Example
{

    public function handle()
    {
        throw new \Exception('Not Found', 404);
    }
}

Начиная с PHPunit 9.0 и далее аннотация expectedException была признана устаревшей и удалена.

Теперь мы можем сосредоточиться на существующих решениях.

Попробуй поймать

Во-первых, это пара try-catch. Я видел, как Адам Уотан использовал его и защищал его в своем курсе TDD. Некоторые разработчики считают это большим старомодным. Однако у него есть одно преимущество. Внутри блока catch вы можете запустить дополнительное условие, связанное с исключением или даже некоторыми другими частями кода, например, пользователь не был обновлен.

/** @test*/
function exception_is_thrown()
{
    try {
        $example = new Example();
        $example->handle();
    } catch (\Exception $e) {
        $this->assertSame('Not Found', $e->getMessage());
        $this->assertSame(404, $e->getCode());

        // additional assertion e.g. user wasn't updated
        return;
    }

    $this->fail('Exception was not thrown.');
}

Ожидания исключения

Этот подход является рекомендуемым PHPunit. Вы можете использовать четыре различных метода expectExceptionexpectExceptionMessageexpectExceptionMessageMatches. Имейте в виду, что, кроме этих 4, Вы не можете использовать никаких других условий. Если вы добавите $this->assertTrue(false); он будет проигнорирован в конце теста.

/** @test */
function exception_is_thrown()
{
    $this->expectException(\Exception::class);
    $this->expectExceptionCode(404);
    $this->expectExceptionMessage('Not Found');
    $this->expectExceptionMessageMatches('/Found/');

    $example = new Example();
    $example->handle();
}

Вывод

Оба варианта являются отличными стратегиями для тестирования исключений PHP. Лично я использую второй вариант по умолчанию. Я бы использовал первый вариант только в том случае, если необходимы дополнительные условия.

https://jcergolj.me.uk/test-laravel-exceptions/

Рейтинг
( 1 оценка, среднее 5 из 5 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.