2015-10-19 53 views
0

我想擴展PHPUnit的功能。如何測試PHPUnit_Framework_TestCase失敗時,預期的異常不會產生

我想擴展它的行爲,關於它如何允許測試聲明預期的Exception被拋出。

我通過擴展PHPUnit_Framework_TestCase,像這樣做到了這一點:

class Improved_TestCase extends PHPUnit_Framework_TestCase { 
    //... 
} 

的問題是,我現在需要編寫一個測試表明,如果@expectedException沒有拋出,測試將失敗。

例如,我要表明,以下測試將失敗:

/** 
* I want to write a TestTest that passes when these tests would fail 
*/ 
class FooTest extends Improved_TestCase { 

    /** 
    * @expectedException Exception 
    */ 
    function testFooThrowsAnnotatedException() 
    { 
     Foo::thisWillNotThrowAnException(); 
    } 

    function testFooThrowsSetException() 
    { 
     $this->setExpectedException('Exception'); 

     Foo::thisWillNotThrowAnException(); 
    } 

} 

上述測試應該失敗。但一些如何我需要寫一個測試,當上述測試失敗將通過。

我已經試過PHPUnit's tests source code,但我不知道如何或在哪裏測試預期的異常測試的工作。

從我可以告訴,我最好的猜測是@expectedException behaviour is tested here,但它沒有任何意義,因爲這些測試將失敗如果PHPUnit的正常工作!

回答

0

,測試它是here in TestCaseTest.php代碼:

function testException() 
{ 
    $test = new ThrowExceptionTestCase('test'); 
    $test->setExpectedException('RuntimeException'); 

    $result = $test->run(); 

    $this->assertEquals(1, count($result)); 
    $this->assertTrue($result->wasSuccessful()); 
}  

public function testNoException() 
{ 
    $test = new ThrowNoExceptionTestCase('test'); 
    $test->setExpectedException('RuntimeException'); 

    $result = $test->run(); 

    $this->assertEquals(1, $result->failureCount()); 
    $this->assertEquals(1, count($result)); 
}