2017-08-03 234 views
3

來自Java背景,我正在研究php代碼庫並希望爲我的代碼添加單元測試。自動注入依賴關係進行單元測試

我有如下有一個DAO類服務類:

class ServiceClass { 

    private $daoClass; 

    public function methodToTest(){} 
} 

我不提供一個構造函數我也不添加對daoClass屬性的設置方法。這是因爲它會使用PHP-DI IoC容器注入。對於單元測試,我使用的是phpunit,所以我嘲笑daoClass對象,並使用反射直接注入該屬性(因爲沒有該屬性的構造函數或設置器)。

在java中,我們可以很容易地使用@InjectMocks註釋或MockitoAnnotations.initMocks方法來做到這一點。

我無法在phpunit中找到類似的方法。

另外,一個不同但相關的問題,有沒有什麼辦法可以在我的測試中創建一個私有屬性並用一些標籤對它進行註釋,並自動轉換爲一個模擬對象實例?就像Java中的mockito如何執行註釋一樣@Mock

+1

你檢查過了嗎? https://github.com/eltrino/PHPUnit_MockAnnotations –

+1

,因爲我猜PHP-DI的[注入現有實例功能](http://php-di.org/doc/inject-on-instance.html)被使用。你會考慮用它來裝配被測試的物體嗎?基本上你是用手做同樣的事情。 – xmike

回答

0

我不知道我自己有任何模擬註解(請參閱第一個註釋以獲取此類鏈接),但爲了您的測試目的,您可以使用純PHP創建您自己的模擬服務類,在測試中。這是相當直接的,只需要自動加載爲開發正確配置。這有一個好處,就是你的圖書館帶有合適的模擬器,否則你會混合到生產代碼中,註釋只能用於測試,但會傳播到非測試環境。

這可能不是你從Java那裏尋找的東西,但是我已經在PHP中用這樣的「手寫」測試助手,特別是當涉及到一些類的時候,已經有了很好的體驗。最後它們非常有用,可以安全地在測試中重複使用。有時他們甚至是必要的,因爲動態創建的模擬不能表達和斷言測試中可能需要的東西。