2011-12-20 40 views
1

所以我決定PHPUnit中使用接縫進行調查,但我碰到一個問題就來了的PHPUnit和接縫

我重新安排我的課的方式,我打破了依賴於數據庫類

db_Class::getMyData($vars); 

成爲

self::getMyData($vars); 

,我加入功能,我的代碼

protected static function getMyData($vars) { 
    return db_Class::getMyData($vars); 
} 

這樣做是爲了讓我可以創建一個繼承此類並重載getMyData函數的類。在運行我的測試用例時能夠改變它。

因此,例如,在擴展類以上和過載該函數的接縫類:

protected static function getMyData($vars) { 
    return array('id'=>1, 'name'=>"My Name"); 
} 

這將是非常有用的,因爲我可以改變數據作爲我喜歡。但是,使用PHPUnit時,您可以使用$ this-> getMock和類似的命令運行模擬。我是否能夠在縫線課程中實現這一點?

我試圖尋找一個解決方案,我不使用依賴注入器,這將是我的另一種選擇,不是很差,只是想評估兩種選擇。

邁克爾羽毛表達接縫是以下幾點:

A seam is a place where you can alter behavior in your program without editing in that place. 

所以我可能無法得到完整的圖片,我一直在努力得到它,而現在,我只是不能讓我的頭靠近它。如果您有任何想法或問題,請發表評論。

我要求的是一種在不同場景下輕鬆使用mock的方法。我並不總是想要在seam中返回相同的值,有時我想返回null來獲取錯誤,有時候會返回一個數組,其中包含正確的數據,有時候可能還有別的東西。

感謝

回答

3

因爲你必須在調用靜態方法時,直接引用類,你不能因爲你可以非靜態方法覆蓋它們。 Static methods make testing difficult.我不打擾重複那裏寫的內容,我強烈建議您按照答案中的鏈接。

在任何情況下,爲什麼該方法是靜態的?受到保護,您只能從同一個班級或其子類中調用它。你可以在這裏發佈更多的上下文嗎?你打算如何使用它,你會在哪裏測試它?你能把它改成非靜態的嗎?

+0

我提供了一個鏈接到我想要的東西低於實現 – Oldek 2011-12-22 13:59:16