PHP 8.5.0 Alpha 4 available for testing

Voting

: seven plus zero?
(Example: nine)

The Note You're Voting On

michaelrfairhurst at gmail dot com
12 years ago
Custom exception classes can allow you to write tests that prove your exceptions
are meaningful. Usually testing exceptions, you either assert the message equals
something in which case you can't change the message format without refactoring,
or not make any assertions at all in which case you can get misleading messages
later down the line. Especially if your $e->getMessage is something complicated
like a var_dump'ed context array.

The solution is to abstract the error information from the Exception class into
properties that can be tested everywhere except the one test for your formatting.

<?php

class TestableException extends Exception {

private
$property;

function
__construct($property) {

$this->property = $property;
parent::__construct($this->format($property));

}

function
format($property) {
return
"I have formatted: " . $property . "!!";
}

function
getProperty() {
return
$this->property;
}

}

function
testSomethingThrowsTestableException() {
try {
throw new
TestableException('Property');
} Catch (
TestableException $e) {
$this->assertEquals('Property', $e->getProperty());
}
}

function
testExceptionFormattingOnlyOnce() {
$e = new TestableException;
$this->assertEquals('I have formatted: properly for the only required test!!',
$e->format('properly for the only required test')
);
}

?>

<< Back to user notes page

To Top