/** * Try to resolve situation with exception. * * @param TestMeta $test * @param MethodEvent $event * @param \Exception $exception * * @return int Status code */ private function exceptionControl(TestMeta $test, MethodEvent $event, \Exception $exception) { if (is_a($exception, $test->getExpectedException())) { $code = $test->getExpectedExceptionCode(); if ($code !== null && $code !== $exception->getCode()) { $error = new TestFailException(sprintf('Failed asserting that expected exception code %d is equal to %d', $code, $exception->getCode()), 0, $exception); $status = $this->context->onFailure($error); $this->finish($test, $event, MethodEvent::METHOD_FAILED, $exception); return $status; } $message = $test->getExpectedExceptionMessage(); if ($message !== null && strpos($exception->getMessage(), $message) === false) { $error = new TestFailException(sprintf('Failed asserting that exception message "%s" contains "%s"', $exception->getMessage(), $message), 0, $exception); $status = $this->context->onFailure($error); $this->finish($test, $event, MethodEvent::METHOD_FAILED, $exception); return $status; } return 0; } else { $this->context->onUnexpectedException($exception); return 1; } }
/** * @expectedException \Unteist\Exception\TestFailException * @expectedExceptionMessage Test was marked as failure by chosen strategy */ public function testUnexpectedExceptionWithAssociation() { $this->context->associateException('Exception', new TestFailStrategy()); $this->context->onUnexpectedException(new \Exception('Message')); }