Skip to content

throws

The throws attribute tells DocTest to expect an exception from the code block. The block passes if the specified exception (or any Throwable) is thrown.

Syntax

Expect any exception

markdown
```php throws
throw new RuntimeException('Something went wrong');
```

Expect a specific exception class

markdown
```php throws(InvalidArgumentException)
throw new InvalidArgumentException('Expected an integer');
```

Expect a specific exception with message

markdown
```php throws(InvalidArgumentException, "Expected an integer")
throw new InvalidArgumentException('Expected an integer');
```

How It Works

  1. The code is wrapped in a try/catch block
  2. If an exception is thrown, its class and message are captured
  3. If a specific class was expected, the thrown class is compared
  4. If a message was specified, a str_contains() check is performed
  5. If no exception is thrown, the block fails

Failure Conditions

The block fails when:

  • No exception is thrown
  • A different exception class is thrown than expected
  • The exception message doesn't contain the expected substring

Examples

Division by zero

markdown
```php throws(DivisionByZeroError)
$result = 1 / 0;
```

Custom exception

markdown
```php throws(App\Exceptions\ValidationException)
validate(['email' => 'not-an-email'], ['email' => 'email']);
```

Exception with message check

markdown
```php throws(RuntimeException, "not found")
throw new RuntimeException('File not found');
```

Alternative: HTML Comment Syntax

markdown
<!-- doctest-attr: throws(RuntimeException, "not found") -->
```php
throw new RuntimeException('File not found');
```

See HTML Comment Syntax for details.

Released under the MIT License.