解决方案 »

  1.   

    class cash 这个已经定义好了吗,还是没有定义?
      

  2.   

    在《修改代码的艺术》一书中找到了答案: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());
          }
    }