PHPUnit Selenium Server - лучшая / нестандартная обработка ошибок? - PullRequest
4 голосов
/ 15 октября 2011

Есть ли способ заставить PHPUnit просто продолжить после ошибки? Например, у меня есть большой набор тестов (более 400 шагов), и я бы предпочел, чтобы, если, скажем, элемент не был найден, это не помешало продолжению моего сценария.

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

Мы делаем то же самое в наших тестах 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));
        }
    }
}
1 голос
/ 19 октября 2012

Есть лучший способ сделать это. Вместо перегрузки каждого метода assert * () вы можете перегрузить только один метод: runTest (). Это для каждого утверждения, и исключения могут быть перехвачены:

abstract class AMyTestCase extends PHPUnit_Framework_TestCase
{
    public function runTest()
    {
        try {
            parent::runTest();
        }
        catch ( MyCustomException $Exc ) {
            // will continue tests
        }
        catch ( Exception $Exc ) {
            if ( false === strpos($Exc->getMessage(), 'element not found') ) {
                // rethrow:
                throw $Exc;
            }
            // will also continue
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...