2010-04-23 75 views
3
在Mock對象設置屬性

我通常使用我的對象getter和setter方法和我很好的測試它們在SimpleTest的模仿對象通過像代碼操縱他們:是否有可能在SimpleTest的

Mock::generate('MyObj'); 
$MockMyObj->setReturnValue('getPropName', 'value') 

不過,我最近開始使用魔法攔截器一樣(__set()__get())和訪問屬性,以便:

$MyObj->propName = 'blah'; 

,但我有具有特定屬性通過使用該技術訪問的困難使得模仿對象。

那麼是否有一些特殊的方法來設置MockObjects的屬性。

我曾嘗試做:

$MockMyObj->propName = 'test Value'; 

但這似乎並沒有工作。不知道是否是我的測試Subject,Mock,魔術攔截器或SimpleTest導致該屬性無法訪問。

因此,簡言之:

可以在我的模仿對象實體模型的方法,但我有麻煩嘲諷式模仿對象的類屬性。是否可以在Simpletest中設置模擬對象的屬性?

任何意見的歡迎。

+0

(我回滾了部分答案,因爲我們鼓勵答案在答案框中,而不是在問題中)。 – halfer 2017-01-03 16:15:41

回答

3

在回答我自己的問題......

是的,它可以設置使用魔法攔截對象嘲笑的屬性 - 剛剛成立的攔截器方法的,就像您的返回值與任何其他方法。

SimpleTest的實施例嘲諷截獲性能上嘲笑對象:

此對象

class MyObj 
    { 

    public function __set($name, $value) 
    { 
    $props[$name] = $value; 
    } 

    public function __get($name) 
    { 
    return $props[$name] = $value; 
    } 

    } 

一個客戶機(測試聚合類)可以訪問屬性,像這樣

$MyObj->propName = 'blah'; 
echo $MyObj->propName; //prints blah 

並且它可以被這樣嘲笑

Mock::generate('MyObj'); 
$MockMyObj = new MockMyObj(); 
$MockMyObj->setReturnValue('__get', 'test property value', array('propName')); 

//...later on... 
echo $MockMyObj->propName; //prints "test property value" 

P.S. 以下是有關嘲笑一些文檔: http://www.simpletest.org/en/mock_objects_documentation.html

P.P.S

我其實之前嘗試,但我的實驗是由我的代碼輸入錯誤掩蓋。

+1

您不需要使用'__get'方法創建初始對象。只在模擬對象上添加' - > setReturnValue('__ get',1,array('myAttribute'));' – Ifnot 2013-10-11 13:10:09

+0

謝謝@AnaelFavre。聽起來很有趣。 – 2013-10-16 15:31:58