我在理解模拟对象方面遇到了一些问题。
我的需求是一个正常工作的观察者,但需要确保方法被使用正确的参数调用。
根据目前的理解,这应该是我要寻找的内容:
观察者:
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');
我理解得对吗?如果不是,请您澄清一下,因为我希望能更加清楚明白。 :)
编辑:修改了帖子以更清晰地表达我的需求和目前的理解。