在《修改代码的艺术》一书中找到了答案:class sendMsg{ protected function cash(){ return new cash() } public function send(){ $cash = $this->cash(); $isCashed = $cash->isCashed(); return $isCashed; //do something } } //将外部依赖抽离到单独的函数 然后测试的时候创建一个子类 class sendMsgExt extend sendMsg{ protected $cash; public function setCash($cash){ return $this->cash = $cash; } protected function cash(){ return $this->cash; } } //测试的时候 实例化子类并通过setCash将mock出来的cash注入进来 class sendMsgTest extension PHPUnit_Framework_TestCase{
public function testSend(){ $sendMsg = new sendMsgExt(); $mockCash = $this->mock('cash'); $mockCash->expects($this->any())->method("isCashed")->will($this->returnValue(1)); $sendMsg->setCash($mockCash); $this->assertEquals(1,$sendMsg->send()); } }
protected function cash(){
return new cash()
}
public function send(){
$cash = $this->cash();
$isCashed = $cash->isCashed();
return $isCashed;
//do something
}
}
//将外部依赖抽离到单独的函数 然后测试的时候创建一个子类
class sendMsgExt extend sendMsg{
protected $cash;
public function setCash($cash){
return $this->cash = $cash;
}
protected function cash(){
return $this->cash;
}
}
//测试的时候 实例化子类并通过setCash将mock出来的cash注入进来
class sendMsgTest extension PHPUnit_Framework_TestCase{
public function testSend(){
$sendMsg = new sendMsgExt();
$mockCash = $this->mock('cash');
$mockCash->expects($this->any())->method("isCashed")->will($this->returnValue(1));
$sendMsg->setCash($mockCash);
$this->assertEquals(1,$sendMsg->send());
}
}