【发布时间】:2012-10-22 06:22:22
【问题描述】:
我在理解模拟对象时遇到了一些问题。
我想要的是一个正常工作的观察者,但要确保使用正确的参数调用方法。
据我所知,这应该是我正在寻找的: 观察者:
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');
我理解对了吗?如果不能,请您为我澄清一下,因为我希望对此有所了解。 :)
编辑:更改了帖子,以更清楚地说明我所追求的以及我目前对它的理解。
【问题讨论】: