2011-05-19 69 views
6

我很好奇其他人如何解決這個問題。編寫測試並不是那麼糟糕,但嘲諷有點吮吸並削減我的流量。如果有一個'fixtures'目錄,並且只有mock_db.php纔可以使用該特定的模擬聲明,那麼可以嗎?phpunit - 爲多個測試套件重複使用模擬對象

更進一步,將這些嘲笑抽象爲一個函數是不好的做法嗎?

即:

// function to include a db mock 
    include_once 'test/fixtures/dbmock.php'; 

    $mockMYSQL = $dbmock('mysql', 'db1'); 
    $mockMSSQL = $dbmock('mssql', 'db2'); 

只是想知道有經驗的測試等如何處理這個問題。我正在編寫腳本來同步2個數據庫,所以這個例子可能變得非常相關。

+0

不要數據提供幫助嗎? – zerkms 2011-05-19 06:56:22

+0

您是否在談論使用'$ this-> getMock('')創建的PHPUnit模擬對象還是這些自定義模擬對象?使用燈具來創建測試支持對象是完全有效的並且是推薦的。 – 2011-05-19 19:49:22

+0

@David我希望有mock可重用的不同測試套件。在這個嘲弄的業務中仍然很綠,並且對如何實現這一點毫無頭緒。 – stefgosselin 2011-05-21 04:34:54

回答

3

我會繼承與繼承 - 共同的模擬對象創建並返回到普通的父測試用例類中受保護的get *方法。

或者你可以創建更清潔和獨立的類,你將在你的測試套件中實例化並讓它創建你的模擬對象。我更喜歡這種方式,但它有一個缺點 - 你可能不能或不應該使用PHPUnit_Framework_TestCase getMock()方法。我建議你看看這個方法,並嘗試在你的獨立類中使用它的邏輯。

包括全球功能不是很OOP,這是相當神奇的是PHP允許,但你應該避免它:)

+0

嗨,感謝提示,在小班的測試用例中進行分類是我失蹤的那篇文章。根據你的建議,我已經創建了幾個獨立的,但我仍然需要研究一種重用getMock()創建器的方法。 – stefgosselin 2011-05-22 11:48:01