我在理解模拟对象时遇到了一些问题。
我想要的是一个正常工作的观察者,但要确保使用正确的参数调用方法。
据我所知,这应该是我正在寻找的:观察者:
class Observer
{
public function returnFooIfBar($bar)
{
return ($bar == 'bar') ? 'foo' : ;
}
}
学科:
class Subject
{
$obs;
__construct(Observer $dependency)
{
$this->obs = $dependency;
}
public function tradeStrings($string)
{
$this->obs->returnFooIfBar($string);
}
}
测试:
class SubjectTest
{
public function testCallsObsMethod()
{
$obs = $this->getMock('Observer') ;
$obs->expect($this->once())
->method('returnFooIfBar')
->with($this->equlTo('bar')) ;
$subj = new Subject($obs);
$returnString= $subj->TradeStrings('bar') ;
$this->assertEqual('foo', $returnString) ;
}
}
据我了解,这测试:
- Observer::getFooIfBar 被调用一次。
- Observer::getFooIfBar 得到字符串 'bar' 3. 该方法按照类中定义的方式工作,并将 'foo' 作为字符串返回。
据我了解,除了没有运行构造函数/自动加载之外,原始类的功能没有改变。
如果我在运行 getMock() 时模拟一个方法,则模拟对象的方法只有在我指定它时才会返回一些东西。
$obs = $this->getMock('Observer', array('returnFooIfBar'));
$obs->expects($this->once())
->method('returnFooIfBar')
->with('bar')
->will($this->returnValue('foo');
我理解对吗?如果不能,请您为我澄清一下,因为我希望对此有所了解。:)
编辑:更改了帖子,以使我更清楚我所追求的以及我目前对它的理解。