2012-05-03 18 views
1
單元測試的

我已經創建了一個模擬數據庫類,這需要預期的SQL查詢作爲參數,並且每次調用比較它針對陣列預期的查詢:外部鉤到「推倒」 PHPUnit中

class Mock_Database 
{ 
    public function __construct(PHPUnit_Framework_TestCase &$testcase, array $expected_queries); 
    public function run_query($sql); 
} 

問題是,我希望它能自動檢查所有查詢是否已經運行,當測試完成時。我想讓它自動鉤入tearDown或類似的東西。有沒有解決這個問題的方法?謝謝。

回答

0

我有類似的問題。這有點不乾淨,但你可以嘗試在測試後執行斷言。 「assertPostConditions」將每個測試用例後執行:

class Foo_Test extends PHPUnit_Framework_TestCase { 
    /** 
    * @see PHPUnit_Framework_TestCase::assertPostConditions() 
    */ 
    public function assertPostConditions() 
    { 
     $this->dbMock->verify(); 
    } 
} 

並拋出一個PHPUnit_Framework_ExpectationFailedException - 在驗證方法 - 如果出事了:

class Mock_Database { 
    public function verify() 
    { 
     // detect differences and assign $allQueriesExecuted 

     if (!$allQueriesExecuted) { 
      throw new PHPUnit_Framework_ExpectationFailedException(/*...*/); 
     } 
    } 
}