2010-01-29 28 views
2

我是PHP SimpleTest框架的新手,我很驚訝地發現失敗的斷言並未停止測試方法。換句話說,這將導致在測試報告發表了兩次失敗消息:可以將PHP SimpleTest框架配置爲快速失敗嗎?

function testFoo() { 
    $this->assertTrue(true, 'first: %s'); 
    $this->assertTrue(false, 'second: %s'); 
    $this->assertTrue(false, 'third: %s'); 
} 

我的大部分單元測試經驗是JUnitNUnit,他們都只要第一斷言失敗停止的測試方法。也許我只是習慣了,但看起來額外的失敗信息只會是噪音。它讓我想起舊C語言編譯器會因爲缺少分號而出現50個錯誤。

我可以配置SimpleTest快速失敗,還是我只需要採用不同的風格?

回答

5

您可以擴展/修改Reporter類,以便在paintFail()之後退出()。
(所述單元測試的任何修改需要)

或者

斷言*函數返回一個布爾值,因此,例如:

$this->assertTrue(false, 'second: %s') or return; 

將結束當前測試功能。

PS:
如果您使用的是PHPUnit_TestCase類而不是UnitTestCase,則assert *函數不會返回布爾值。

1

assert方法確實會爲通過或失敗返回一個布爾值,因此您可以檢查並在出現問題時停止測試。

我不認爲這是可擴展到項目中的每個測試,但一些特別嘈雜的測試可能會從中受益。

這裏有一個簡單的例子:

function testBar() { 
    $pass = $this->assertTrue(true, 'first: %s'); 
    $pass = $pass && $this->assertTrue(false, 'second: %s'); 
    $pass = $pass && $this->assertTrue(false, 'third: %s'); 
} 

if語句來包裝一大塊的代碼,您可以使用。

3

這不是真的回答你的問題,但對於它的價值,PHPUnit總是快速失敗。

http://www.phpunit.de/manual/current/en/goals.html說:

...第一次測試失敗,中斷測試運行並且PHPUnit會報告該錯誤。

+0

我沒有真正選擇SimpleTest,它只是與CakePHP集成。到目前爲止,讓我查閱PHPUnit並不夠麻煩。 –

1

我需要這個,因爲我所有的測試都依賴於數據庫的啓動。如果數據庫關閉,我真的不關心10,000次失敗的屏幕。由於簡單測試在失敗後立即打印,並且只是php代碼,您可以使用簡單的die聲明停止測試。

下面是我的代碼對於我的關鍵「我連接」測試的樣子。

function testDatabaseAccess() 
{ 
    $connected = TRUE; 
    GLOBAL $clients; 
    $connected &= $this->assertTrue(is_object($clients), 'Clients database not connected.'); 

    GLOBAL $practices; 
    $connected &= $this->assertTrue(is_object($practices), 'Practices database not connected.'); 

    GLOBAL $user; 
    $connected &= $this->assertTrue(is_array($user), 'User not defined.'); 

    GLOBAL $practice; 
    $connected &= $this->assertTrue(is_object($practice), 'Practice database not connected.'); 

    if (!$connected) 
    { 
    die('Not Connected.'); 
    } 
} 

主要生產:

enter image description here

當然,我沒有得到總結線,但爲我用情況下,我不需要或不想要我的摘要行。沒有數據庫,沒有測試點。對於我的其他測試,我確實喜歡它不會立即失敗。我通常希望在一次運行中看到我所有的失敗。