Memberikan cara alternatif untuk menguji kode yang memunculkan pengecualian menggunakan PHPUnit 10 atau 11. Manfaat utamanya adalah akses ke Pengecualian yang dilempar untuk pemeriksaan lebih lanjut. Ini mungkin berguna ketika Anda perlu memeriksa detail pengecualian yang tidak diharapkan di PHPUnit. Contoh di bawah ini bertindak sebagai Quick Start, untuk lebih jelasnya lihat Panduan Lengkap di bawah.
<?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 ());
}
}
Komposer adalah satu-satunya metode yang didukung untuk menginstal paket ini.
composer require --dev cspray/assert-throws
PHPUnit menyediakan cara yang masuk akal untuk menguji pengecualian yang diharapkan secara langsung. Untuk sebagian besar situasi, metode yang disediakan PHPUnit sudah cukup. Namun, ada beberapa skenario di mana Anda mungkin perlu menguji kode pelemparan pengecualian dengan cara yang tidak tersedia di PHPUnit. Contohnya termasuk kode di mana Anda ingin menguji pengecualian sebelumnya atau jika pengecualian tersebut menyertakan informasi spesifik domain. Dalam situasi inilah perpustakaan ini paling tepat.
Semua pernyataan yang disediakan oleh perpustakaan ini membutuhkan callable yang diharapkan menghasilkan pengecualian. Jika pengecualian tidak dilempar, PHPUnitFrameworkExpectationFailedException
akan dilempar sehingga mengakibatkan kegagalan pengujian. Jika tidak, pengecualian yang dilempar akan dikembalikan untuk pernyataan tambahan.
Metode statis berikut tersedia di kelas 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 '
);
Selain kelas ThrowableAssert
dengan metode statis, ada fungsi global yang tersedia:
<?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 '
);
Serta sifat untuk digunakan dalam implementasi PHPUnitFrameworkTestCase
Anda:
<?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 '
);
}
}
Metode mana yang Anda gunakan adalah pilihan pribadi. Pada akhirnya, semua contoh menggunakan metode statis yang tersedia di kelas ThrowableAssert
.