2015-09-09 29 views
1

我對PHPSpec和BDD一般都很陌生,所以也許我的假設不好,那麼請糾正我。通過具體的類測試抽象類

讓我們考慮這種情況下

//src/myBundle/Model/FooInterface 
interface FooInterface 
{ 
    [...] 
} 

//src/myBundle/Model/FooAbstractManager 
abstract class FooAbastractManager implements FooInterface 
{ 
    public function aCommonMethodForAllConcrete() 
    { 
     [...] 
    } 
} 

好吧,讓我們說,aCommonMethodForAllConcrete()分享一些與實行所有的具體類和我想要寫測試用例一次。

我終於(糾正我,如果我錯了)有一個「想法」:創建一個具體的FooAbstractManager只用於測試這個常用的方法,並將所有具體的方法測試留給具體的類。

但是,因爲我不希望這個FooAbstractManager成爲我的src代碼庫的一部分,所以最好的情況是將該類僅包含在spec文件夾的特定子目錄中。

問題:我如何定製這個行爲而沒有指定ALL /src/myBundle/Model name-spaced files will be there(因爲也許明天我需要在那裏保留一個具體的類文件)?

回答

2

你是對的,你可以只是爲了測試創建一個具體的類。它必須擴展抽象類併爲抽象類的抽象方法提供虛擬實現(如果有的話)。

因爲爲測試而創建的這個類只是抽象類的一個精簡版,它並不提供任何功能,它只用於單個的spec中,您甚至不需要將它放入它自己的文件。只需將它放在spec文件的末尾即可。

這是一種測試抽象類的「官方」方式。檢查phpspec其中一位創作者編寫的this article上的「限制#5」。