07/04
2018
Wallogit.com
2017 © Pedro Peláez
Exception assertions for PHPUnit
assertThrows()
Industry standard, lambda-based exception testing assertions for PHPUnit., (*1)
Easily install it with composer:, (*2)
composer require --dev jchook/phpunit-assert-throws
Or, alternatively copy the tiny gist and add it to you project. No attribution is requried. True artists steal., (*3)
To enable lambda-based exception testing syntax to PHPUnit., (*4)
assert* syntaxmessage, code, and class
assertNotThrows
Just to illustrate the spirit behind the syntax:, (*5)
assertThrows(
MyException::class,
fn() => $x->doSomethingBad()
);
```
---
Advanced Example
----------------
The class below demonstrates more advanced features.
```php
assertThrows(MyException::class, function() use ($obj) {
$obj->doSomethingBad();
});
// Test custom aspects of a custom extension class
$this->assertThrows(MyException::class,
function() use ($obj) {
$obj->doSomethingBad();
},
function($exception) {
$this->assertEquals('Expected value', $exception->getCustomThing());
$this->assertEquals(123, $exception->getCode());
}
);
// Test that a specific method does *NOT* throw
$this->assertNotThrows(MyException::class, function() use ($obj) {
$obj->doSomethingGood();
});
}
}
?>
Yes, assertNotThrows() feels grammatically… odd. However, it conforms with the PHPUnit naming conventions, such as assertNotContains(). Additionally, the PHPUnit team suggests we may not need this inverse assertion., (*6)
MIT, (*7)