这是以下代码示例
<?php
interface iFS
{
public function read();
public function write($data);
}
class MyClass
{
protected $_fs = null;
public function __construct(iFS $fs)
{
$this->_fs = $fs;
}
public function run(array $list)
{
foreach ($list as $elm)
{
$this->_fs->write($elm);
}
return $this->_fs->read();
}
}
class MyTests extends PHPUnit_Framework_TestCase
{
public function testFS()
{
$mock = $this->getMock('iFS');
$mock->expects($this->at(0))
->method('read')
->will($this->returnValue('tototatatiti'));
$c = new MyClass($mock);
$result = $c->run(array('toto', 'tata', 'titi'));
$this->assertEquals('tototatatiti', $result);
}
}
这绝对不是一个真实的案例,但它使 phpunit 和 at($index) 功能发生了一些奇怪的事情。
我的问题很简单,测试失败正常吗?
我明确要求返回“tototatatiti”,但它从未发生过......
什么时候
- 我删除了 $this->_fs->write($elm); 行 或者
- 我将 $mock->expects($this->at(0)) 替换为 $mock->expects($this->once())
测试通过绿色
有什么我不明白的吗?
编辑:
$mock->expects($this->at(3)) ->method('read') ->will($this->returnValue('tototatatiti'));
=> 将使测试通过绿色...