Properties 是否可以在Simpletest中设置模拟对象的属性
我通常在我的对象上使用getter和setter方法,我可以在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'; 但是我很难通过使用这种技术使模拟对象具有访问的特定属性
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。听上去很有趣。(我已经把部分答案放回原处,因为我们鼓励回答框中的答案,而不是问题中的答案)。