2012-02-27 25 views
2

在PHPUnit的3.6.4,當我運行基於PHPUnit_Extensions_SeleniumTestCase的測試,我用的PHPUnit和硒 - 更新到3.6.10版本之後似乎markTestSkipped的markTestIncomplete和調用導致有錯誤的測試

$this->markTestSkipped(); 

$this->markTestIncomplete(); 

我有測試跳過(S)或標記爲未完成(I)。

但是在將PHPUnit更新到3.6.10 - 最新的版本之後 - 這些函數似乎通過產生錯誤而不是跳過它而失敗了測試。

更多的例子,藉此測試:

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

它仍然會運行測試,並給你這樣的輸出,如果你沒有硒服務器上運行:

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

此版本的PHPUnit可能存在一些錯誤。我也遇到了一些問題:我收到一些錯誤,聲稱...'方法沒有定義,但在使用PHPUnit 3.5進行測試時,一切都正常。通過降級,我回到了舊版本的PHPUnit(http://www.niden.net/2012/01/downgrading-phpunit-from-36-to-35.html)。 – faramka 2012-02-28 07:39:10

回答

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設置爲真,就會出現此錯誤。所以,我目前使用的解決方法是設置$this->captureScreenshotOnFailure=true在我Selenium測試的setUp()方法,並在每次標記測試爲要跳過我打電話跳過方法之前手動禁用的截圖:

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

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

這適用於我,因爲它正確標記了跳過的硒測試,但仍保留所有其他測試的屏幕截圖功能。

但是,如果您的項目中有大量跳過的測試,這可能有點乏味,我不能保證沒有任何其他副作用,因爲我並不太熟悉與PHPUnit的內部。在這種情況下,最好的解決方案可能是等待更新,直到它被phpunit-selenium的創建者修復,因爲它似乎已經知道這個問題。

相關問題