Мы делаем то же самое в наших тестах Selenium. Вам нужно перехватывать исключения, возникающие при сбоях утверждений, и единственный способ сделать это - создать собственный базовый класс тестового набора, который переопределяет методы утверждений. Вы можете сохранить сообщения об ошибках и завершить тест в конце, используя прослушиватель теста.
У меня нет кода передо мной, но это было довольно просто. Например,
abstract class DelayedFailureSeleniumTestCase extends PHPUnit_Extension_SeleniumTestCase
{
public function assertElementText($element, $text) {
try {
parent::assertElementText($element, $text);
}
catch (PHPUnit_Framework_AssertionFailedException $e) {
FailureTrackerListener::addAssertionFailure($e->getMessage());
}
}
... other assertion functions ...
}
class FailureTrackerListener implements PHPUnit_Framework_TestListener
{
private static $messages;
public function startTest() {
self::$messages = array();
}
public static function addAssertionFailure($message) {
self::$messages[] = $message;
}
public function endTest() {
if (self::$messages) {
throw new PHPUnit_Framework_AssertionFailedException(
implode("\n", self::$messages));
}
}
}