當用PHPUnit模擬對象時,如何訪問通常通過重載訪問的對象的屬性,即通過__get()
?如何訪問PHPUnit模擬對象上的重載屬性?
例如,在下面的代碼中,我正在測試Post對象。每個帖子都有一個作者,哪個角色類型。每個角色都有一個簽名屬性。
$author = $this->getMockBuilder('App_Model_Domain_Role')
->disableOriginalConstructor()
->getMock();
$author->expects($this->any())
->method('__get')
->will($this->returnValue('authorname'));
正如你可以看到我嘲笑的作用對象,然後將其配置爲返回一個字符串(「AUTHORNAME」)時__get()
被調用。我測試的Post對象是指$this->author->signature
。我期待它返回'authorname',但是測試錯誤出來說$signature
是一個未定義的屬性。
我嘗試配置上述模擬,但沒有撥打method()
(認爲expects()
和will()
調用將適用於所有模擬方法),但仍然沒有成功。
任何想法?另外,如果你知道關於PHPUnit mocks的一個很好的教程,我會熱衷於看到它 - 手冊似乎假設在這個特定領域中有先驗知識。
或許將簽名法作爲一個匿名函數,你模仿的對象,然後從該匿名函數返回「AUTHORNAME」。這最終會與使用我認爲的will()方法相同。 – qrazi 2013-02-12 08:21:09