Предоставляет альтернативный способ тестирования кода, выдающего исключения, с использованием PHPUnit 10 или 11. Основное преимущество — доступ к выброшенному исключению для дальнейшей проверки. Это может оказаться полезным, когда вам нужно проверить детали исключения, которого нет в PHPUnit. Приведенный ниже пример служит кратким руководством. Для получения более подробной информации ознакомьтесь с подробным руководством ниже.
<?php declare (strict_types= 1 );
use Cspray AssertThrows ThrowableAssert ;
use PHPUnit Framework TestCase ;
final class MyTest extends TestCase {
public function testExceptionPreviousInstanceOf () : void {
$ throwable = ThrowableAssert:: assertThrows (
static fn () => throw new RuntimeException (previous: new BadMethodCallException ())
);
self :: assertInstanceOf (BadMethodCallException::class, $ throwable -> getPrevious ());
}
}
Composer — единственный поддерживаемый метод установки этого пакета.
composer require --dev cspray/assert-throws
PHPUnit предоставляет разумный способ проверки ожидаемых исключений «из коробки». В большинстве ситуаций методов, предоставляемых PHPUnit, должно быть достаточно. Однако существуют сценарии, в которых вам может потребоваться протестировать код, вызывающий исключение, способом, недоступным в PHPUnit. Примеры этого включают код, в котором вы хотите протестировать предыдущее исключение или если исключение содержит информацию, специфичную для домена. Именно в таких ситуациях данная библиотека наиболее уместна.
Все утверждения, предоставляемые этой библиотекой, принимают вызываемый объект, который, как ожидается, выдаст исключение. Если исключение не создано, будет создано исключение PHPUnitFrameworkExpectationFailedException
что приведет к сбою теста. В противном случае выброшенное исключение будет возвращено для дополнительных утверждений.
В классе CsprayAssertThrowsThrowableAssert
доступны следующие статические методы:
<?php
use Cspray AssertThrows ThrowableAssert ;
$ throwable = ThrowableAssert:: assertThrows ( static fn () => throw new RuntimeException ());
$ throwable = ThrowableAssert:: assertThrowsExceptionType (
static fn () => throw new BadMethodCallException (),
BadMethodCallException::class
);
$ throwable = ThrowableAssert:: assertThrowsExceptionTypeWithMessage (
static fn () => throw new RuntimeException ( ' My exception message ' ),
RuntimeException::class,
' My exception message '
);
Помимо класса ThrowableAssert
со статическими методами доступны глобальные функции:
<?php
use function Cspray AssertThrows assertThrows ;
use function Cspray AssertThrows assertThrowsExceptionType ;
use function Cspray AssertThrows assertThrowsExceptionTypeWithMessage ;
$ throwable = assertThrows ( static fn () => throw new RuntimeException ());
$ throwable = assertThrowsExceptionType (
static fn () => throw new BadMethodCallException (),
BadMethodCallException::class
);
$ throwable = assertThrowsExceptionTypeWithMessage (
static fn () => throw new RuntimeException ( ' My exception message ' ),
RuntimeException::class,
' My exception message '
);
А также черта, которую можно использовать в ваших реализациях PHPUnitFrameworkTestCase
:
<?php
use Cspray AssertThrows ThrowableAssertTestCaseMethods ;
use PHPUnit Framework TestCase ;
class MyTestCase extends TestCase {
use ThrowableAssertTestCaseMethods;
public function testAssertThrows () : void {
$ throwable = self :: assertThrows ( static fn () => new RuntimeException ());
}
public function testAssertThrowsExceptionType () : void {
$ throwable = self :: assertThrowsExceptionType (
static fn () => throw new BadMethodCallException (),
BadMethodCallException::class
);
}
public function testAssertThrowsExceptionTypeWithMessage () : void {
$ throwable = self :: assertThrowsExceptionTypeWithMessage (
static fn () => throw new RuntimeException ( ' My exception message ' ),
RuntimeException::class,
' My exception message '
);
}
}
Какой метод вы используете — это личное предпочтение. В конечном счете, во всех примерах используются статические методы, доступные в классе ThrowableAssert
.