2014-06-28 89 views
1

我想测试一个方法测试递归方法

public function get($key) 
{ 
    if (!($time = $this->driver->get($key))) { 
     if ($key == self::LAST_UPDATE_KEY) { 
      $time = new \DateTime(); 
      $this->driver->set($key, $time); 
     } else { 
      $time = $this->get(self::LAST_UPDATE_KEY); // need test this condition 
     } 
    } 

    return $time; 
} 

从驱动器的第一个请求数据应该返回null,而第二个含义是必要的我。

我写上执行返回一个错误

Expectation failed for method name is equal to <string:get> when invoked 1 time(s) 
Parameter 0 for invocation MyDriver::get('foo') does not match expected value. 
Failed asserting that two strings are equal. 
--- Expected 
+++ Actual 
@@ @@ 
-'last-update' 
+'foo' 

长一段时间我没有写单元测试的测试

public function testGetEmpty() 
{ 
    $time = new \DateTime(); 
    $driver_mock = $this 
     ->getMockBuilder('MyDriver') 
     ->getMock(); 
    $driver_mock 
     ->expects($this->once()) 
     ->method('get') 
     ->with('foo') 
     ->will($this->returnValue(null)); 
    $driver_mock 
     ->expects($this->once()) 
     ->method('get') 
     ->with(Keeper::LAST_UPDATE_KEY) 
     ->will($this->returnValue($time)); 

    $obj = new Keeper($driver_mock); 
    $this->assertEquals($time, $obj->get('foo')); 
} 

,很多都忘了。帮助我理解。

+0

找到了解决办法。需要使用$ this-> at(0)和$ this-> at(1) – ghost404

回答

0

需要使用$this->at(0)$this->at(1)