Properties 是否可以在Simpletest中设置模拟对象的属性

Properties 是否可以在Simpletest中设置模拟对象的属性,properties,mocking,simpletest,Properties,Mocking,Simpletest,我通常在我的对象上使用getter和setter方法,我可以在SimpleTest中将它们作为模拟对象进行测试,方法是使用如下代码操作它们: Mock::generate('MyObj'); $MockMyObj->setReturnValue('getPropName', 'value') 但是,我最近开始使用magic拦截器(_set()_get())并访问如下属性: $MyObj->propName = 'blah'; 但是我很难通过使用这种技术使模拟对象具有访问的特定属性

我通常在我的对象上使用getter和setter方法,我可以在SimpleTest中将它们作为模拟对象进行测试,方法是使用如下代码操作它们:

Mock::generate('MyObj');
$MockMyObj->setReturnValue('getPropName', 'value')
但是,我最近开始使用magic拦截器(_set()_get())并访问如下属性:

$MyObj->propName = 'blah';
但是我很难通过使用这种技术使模拟对象具有访问的特定属性

所以有一些特殊的方法来设置MockObjects的属性

我尝试过:

 $MockMyObj->propName = 'test Value';
但这似乎不起作用。不确定是我的测试主题、Mock、magic拦截器还是SimpleTest导致属性不可访问

因此,总而言之:

我可以在模拟对象上模拟方法,但我在模拟模拟模拟对象的类属性时遇到困难。是否可以在Simpletest中设置模拟对象的属性?


欢迎任何意见

在回答我自己的问题时

是的,可以设置使用魔法拦截器的对象的模拟的属性——只需像设置任何其他方法一样设置拦截器方法的返回值

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.p.S


我以前确实尝试过,但我的实验被代码中的一个输入错误所掩盖。

您不需要使用
\uu get
方法创建初始对象。仅添加
->setReturnValue(''uuu get',1,数组('myAttribute')正在工作:)谢谢@AnaelFavre。听上去很有趣。(我已经把部分答案放回原处,因为我们鼓励回答框中的答案,而不是问题中的答案)。