Bietet eine alternative Möglichkeit, Code zu testen, der Ausnahmen mit PHPUnit 10 oder 11 auslöst. Der Hauptvorteil besteht im Zugriff auf die ausgelöste Ausnahme zur weiteren Überprüfung. Dies kann sich als nützlich erweisen, wenn Sie nach Details einer Ausnahme suchen müssen, die in PHPUnit nicht zu erwarten sind. Das folgende Beispiel dient als Schnellstart. Weitere Einzelheiten finden Sie in der ausführlichen Anleitung unten.
<?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 ist die einzige unterstützte Methode zur Installation dieses Pakets.
composer require --dev cspray/assert-throws
PHPUnit bietet eine sinnvolle Möglichkeit, sofort auf erwartete Ausnahmen zu testen. Für die meisten Situationen sollten die von PHPUnit bereitgestellten Methoden ausreichen. Es gibt jedoch Szenarien, in denen Sie möglicherweise Code zum Auslösen von Ausnahmen auf eine Weise testen müssen, die in PHPUnit nicht ohne weiteres verfügbar ist. Beispiele hierfür sind Code, in dem Sie die vorherige Ausnahme testen möchten oder wenn die Ausnahme domänenspezifische Informationen enthält. In diesen Situationen ist diese Bibliothek am besten geeignet.
Alle von dieser Bibliothek bereitgestellten Zusicherungen erfordern einen Callable, von dem erwartet wird, dass er eine Ausnahme auslöst. Wenn keine Ausnahme ausgelöst wird, wird eine PHPUnitFrameworkExpectationFailedException
ausgelöst, die zu einem Testfehler führt. Andernfalls wird die ausgelöste Ausnahme für zusätzliche Behauptungen zurückgegeben.
Die folgenden statischen Methoden sind für die Klasse CsprayAssertThrowsThrowableAssert
verfügbar:
<?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 '
);
Zusätzlich zur ThrowableAssert
-Klasse mit statischen Methoden stehen globale Funktionen zur Verfügung:
<?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 '
);
Sowie eine Eigenschaft, die Sie in Ihren PHPUnitFrameworkTestCase
Implementierungen verwenden können:
<?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 '
);
}
}
Welche Methode Sie verwenden, ist eine persönliche Präferenz. Letztendlich nutzen alle Beispiele die statischen Methoden, die in der ThrowableAssert
-Klasse verfügbar sind.