I wrote a PHPUnit test that checks to see if an exception is thrown when closing a method call. The close function is passed as an argument to the method with an exception to it.
public function testExceptionThrownFromClosure() { try { $this->_externalResourceTemplate->get( $this->_expectedUrl, $this->_paramsOne, function ($anything) { throw new Some_Exception('message'); } ); $this->fail("Expected exception has not been found"); } catch (Some_Exception $e) { var_dump($e->getMessage()); die; } }
The code for the get function specified on the ExternalResourceTemplate,
public function get($url, $params, $closure) { try { $this->_getHttpClient()->setUri($url); foreach ($params as $key => $value) { $this->_getHttpClient()->setParameterGet($key, $value); } $response = $this->_getHttpClient()->request(); return $closure($response->getBody()); } catch (Exception $e) {
Any ideas why the fail assert statement is being called? Can you not catch the exceptions thrown from closures in PHP, or is there a specific way to deal with them that I donβt know about.
For me, the exception should just propagate the original stack, but it does not appear. This is mistake? FYI I am running PHP 5.3.3
source share