PHPUnit & Selenium - после обновления до версии 3.6.10 кажется, что вызовы markTestSkipped и markTestIncomplete приводят к ошибке теста - PullRequest
2 голосов
/ 27 февраля 2012

В PHPUnit 3.6.4, когда я запускаю тест на основе PHPUnit_Extensions_SeleniumTestCase и использую

$this->markTestSkipped();

или

$this->markTestIncomplete();

, тест пропущен (S) или отмеченкак неполное (I).

Но после обновления PHPUnit до версии 3.6.10 - самой последней версии - эти функции, похоже, не проходят тест, вызывая ошибку вместо ее пропуска.

Дополнительные примеры, пройдите этот тест:

class ExampleTest extends PHPUnit_Extensions_SeleniumTestCase
{
    public function testMyCase()
    {
        $this->markTestIncomplete();
    }
}  

Он все равно запустит тест и выдаст вам этот вывод, если сервер Selenium не запущен:

PHPUnit 3.6.10 by Sebastian Bergmann.

E

Time: 0 seconds, Memory: 6.25Mb

There was 1 error:

1) ExampleTest::testMyCase
RuntimeException: 

/usr/bin/phpunit:46

FAILURES!
Tests: 1, Assertions: 0, Errors: 1

Если у вас запущен сервер Selenium, результат будет немного другим, но у вас все равно будет ошибка.Это только для тестов Selenium, кажется, что тесты, расширяющие PHPUnit_Framework_TestCase, в порядке.Чтобы подтвердить это, измените класс, с которого вы его расширяете, на PHPUnit_Framework_TestCase:

class ExampleTest extends PHPUnit_Framework_TestCase
{
    public function testMyCase()
    {
        $this->markTestIncomplete();
    }
}  

И у вас будет такой результат:

PHPUnit 3.6.10 by Sebastian Bergmann.

I

Time: 0 seconds, Memory: 5.25Mb

OK, but incomplete or skipped tests!
Tests: 1, Assertions: 0, Incomplete: 1.

Итак, мой вопрос: это ошибка вPHPUnit 3.6.10?Это какая-то классная функция, которую я не знаю, и я делаю что-то не так?

1 Ответ

2 голосов
/ 29 мая 2012

Я столкнулся с той же проблемой, и похоже, что эта проблема не связана с ядром PHPUnit, а скорее с расширением PHPUnit Selenium. Билет уже был зарегистрирован в их системе отслеживания ошибок .

Я отследил точную строку, в которой выдается ошибка, и нашел ее в Extensions / SeleniumTestcase.php в строке 1215 :

1213: // gain the screenshot path, lose the stack trace
1214: if ($this->captureScreenshotOnFailure) {
1215:    throw new PHPUnit_Framework_Error($buffer, $e->getCode(), $e->getFile(), $e->getLine(), $e->getTrace());
1216: }

Как видите, эта ошибка возникает, только если для $this->captureScreenshotOnFailure установлено значение true. Таким образом, обходной путь, который я использую в настоящее время, состоит в том, чтобы установить $this->captureScreenshotOnFailure=true в методе setUp() моих тестов Selenium, и в каждом тесте, помеченном как пропущенный, я отключаю снимки экрана вручную перед вызовом метода пропуска:

public function setUp() {
    [...]
    $this->captureScreenshotOnFailure = true;
}

/**
 * @test
 */
public function mySkippedTest() {
    $this->captureScreenshotOnFailure = false; 
    $this->markTestSkipped(); 
    [...]
}

Это работает для меня, так как правильно помечает пропущенные тесты Selenium как таковые, но все еще сохраняет функцию скриншота для всех остальных тестов.

Однако, если у вас есть огромное количество пропущенных тестов в ваших проектах, это может быть немного утомительно, и я не могу гарантировать, что нет никаких других побочных эффектов, так как я не слишком знаком с Внутренние элементы PHPUnit. В этом случае, вероятно, лучшим решением будет подождать с обновлением, пока оно не будет исправлено создателями phpunit-selenium, так как кажется, что они уже знают об этой проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...