在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中的一个错误吗?这是一个很酷的功能,我不知道,我做错了什么?
答案 0 :(得分:2)
我遇到了同样的问题,看起来这个问题与PHPUnit的核心无关,而是与PHPUnit Selenium扩展相关联。 A ticket has already been filed in their issue tracking system。
我找到了引发错误的确切行,并在Extensions/SeleniumTestcase.php on line 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时才会出现此错误。所以我目前使用的解决方法是在我的Selenium测试的$this->captureScreenshotOnFailure=true
方法中设置setUp()
,并在每个标记为跳过的测试中设置我在调用skip方法之前手动禁用屏幕截图:
public function setUp() {
[...]
$this->captureScreenshotOnFailure = true;
}
/**
* @test
*/
public function mySkippedTest() {
$this->captureScreenshotOnFailure = false;
$this->markTestSkipped();
[...]
}
这对我有用,因为它正确地标记了跳过的Selenium测试,但仍然保留了所有其他测试的屏幕截图功能。
但是,如果您的项目中有大量跳过的测试,这可能会有点乏味,我不能保证没有任何其他副作用,因为我不太熟悉PHPUnit的内部。在这种情况下,最好的解决方案可能是等待更新,直到phpunit-selenium的创建者修复它,因为它们似乎已经意识到这个问题。