07/04
2018
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)