Fournit un autre moyen de tester le code qui génère des exceptions à l'aide de PHPUnit 10 ou 11. Le principal avantage étant l'accès à l'exception levée pour une inspection plus approfondie. Cela peut s'avérer utile lorsque vous devez vérifier les détails d'une exception qui ne sont pas disponibles dans PHPUnit. L'exemple ci-dessous fait office de démarrage rapide. Pour plus de détails, consultez le guide détaillé ci-dessous.
<?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 est la seule méthode prise en charge pour installer ce package.
composer require --dev cspray/assert-throws
PHPUnit fournit un moyen raisonnable de tester les exceptions attendues dès le départ. Pour la plupart des situations, les méthodes fournies par PHPUnit devraient suffire. Cependant, il existe des scénarios dans lesquels vous devrez peut-être tester le code de lancement d'exception d'une manière qui n'est pas facilement disponible dans PHPUnit. Des exemples de ceci incluent le code dans lequel vous souhaitez tester l'exception précédente ou si l'exception inclut des informations spécifiques au domaine. C'est dans ces situations que cette bibliothèque est la plus appropriée.
Toutes les assertions fournies par cette bibliothèque prennent un appelable qui est censé lever une exception. Si aucune exception n'est levée, une PHPUnitFrameworkExpectationFailedException
sera levée, entraînant un échec du test. Sinon, l'exception levée sera renvoyée pour des assertions supplémentaires.
Les méthodes statiques suivantes sont disponibles sur la classe 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 '
);
En plus de la classe ThrowableAssert
avec des méthodes statiques, des fonctions globales sont disponibles :
<?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 '
);
Ainsi qu'un trait à utiliser dans vos implémentations 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 '
);
}
}
La méthode que vous utilisez est une préférence personnelle. En fin de compte, tous les exemples utilisent les méthodes statiques disponibles dans la classe ThrowableAssert
.