我正在尝试在 PHP 中测试捕获和处理自定义异常。
我用一些额外的属性和方法扩展了基本异常类型。
我存根的类之一可能会引发异常,我希望能够测试我是否正确捕获并处理了该异常(在这种情况下,这意味着构建一个响应对象以从调用中返回)。
例如
try {
$objectBeingStubbed->doSomething();
} catch (\Exception $ex) {
if ($ex instanceof CustomExceptionType) {
$this->_errorResponse->error->message = $exception->getMessage();
$this->_errorResponse->error->code = $exception->getCode();
$this->_errorResponse->error->data = $exception->getData();
} else {
throw $ex;
}
}
我试图模拟抛出的异常:
$objectStub->expects($this->any())
->method('doSomething')
->will($this->throwException(new CustomExceptionType()));
但是当异常到达我正在测试的类时,它现在是“Mock_ErrorResponse_????”的一个实例 这不会扩展我的自定义异常。我的异常包含在 Mock_ErrorResponse 的“$exception”属性中。
有什么方法可以处理这个问题而不会被迫做一些可怕的事情,比如:
if ($ex instanceof PHPUnit_Framework_MockObject_Stub_Exception) {
$ex = $ex->exception;
}
if ($ex instanceof CustomExceptionType) {
...
在我正在测试的班级内?