Exceptions

PHP での動作をテストする場合、例外またはエラーがスローされたかどうかを確認する必要がある場合があります。例外がスローされることを期待するテストを作成するには、throws() メソッドを使用します。

1it('throws exception', function () {
2 throw new Exception('Something happened.');
3})->throws(Exception::class);

例外メッセージに対してもアサーションを行う場合は、throws() メソッドに 2 番目の引数を指定できます。

1it('throws exception', function () {
2 throw new Exception('Something happened.');
3})->throws(Exception::class, 'Something happened.');

例外タイプが関係なく、メッセージのみを考慮する場合は、例外のタイプを指定せずにメッセージを渡すだけでかまいません。

1it('throws exception', function () {
2 throw new Exception('Something happened.');
3})->throws('Something happened.');

指定されたブール式が true と評価される場合に例外を条件付きで検証するには、throwsIf() メソッドを使用できます。

1it('throws exception', function () {
2 //
3})->throwsIf(fn() => DB::getDriverName() === 'mysql', Exception::class, 'MySQL is not supported.');

throwsIf() メソッドと同様に、throwsUnless() メソッドを使用して、指定されたブール式が false と評価される場合に例外を条件付きで検証できます。

1it('throws exception', function () {
2 //
3})->throwsUnless(fn() => DB::getDriverName() === 'mysql', Exception::class, 'Only MySQL is supported.');

指定されたクロージャーが 1 つ以上の例外をスローするかどうかも、期待値 API の toThrow() メソッドを使用して検証できます。

1it('throws exception', function () {
2 expect(fn() => throw new Exception('Something happened.'))->toThrow(Exception::class);
3});

例外がスローされないことを期待する場合は、throwsNoExceptions() メソッドを使用できます。

1it('throws no exceptions', function () {
2 $result = 1 + 1;
3})->throwsNoExceptions();

テストを不合格とマークする必要がある場合があります。これを行うには、fail() メソッドを使用できます。

1it('fail', function () {
2 $this->fail();
3});

また、fail() メソッドにメッセージを渡すこともできます。

1it('fail', function () {
2 $this->fail('Something went wrong.');
3});

さらに、fails() メソッドを使用してテストの失敗を検証することもできます。

1it('fails', function () {
2 throw new Exception('Something happened.');
3})->fails();

fail() メソッドと同様に、fails() メソッドにメッセージを渡すこともできます。

1it('fails', function () {
2 throw new Exception('Something happened.');
3})->fails('Something went wrong.');

例外をアサートするテストの書き方を学んだら、次のステップは「テストのフィルタリング」を探ることです。この機能を使用すると、テスト名、汚れたファイルなどの条件に基づいて特定のテストを効率的に実行できます。 テストのフィルタリング →