我正在编写依赖于外部类 exceptionManager 的单元测试。我希望能够预测此类中的一些特定函数将返回什么,所以我使用了一个模拟对象。代码非常简单:
$mockExceptionManager = $this->getMock('exceptionManager');
问题是,我的异常管理器实现了 IteratorAggregate 接口(interface),它需要一个如下所示的方法:
public function getIterator()
{
return new ArrayIterator($this->exceptions);
}
当我运行单元测试时,出现以下错误:
Fatal error: Cannot redeclare Mock_exceptionManager_ae79bad2::getIterator() in /Applications/MAMP/bin/php5.2/lib/php/PEAR/PHPUnit/Framework/MockObject/Generator.php(170) : eval()'d code on line 297
我感觉 PHPUnit 模拟对象套件也实现了 IteratorAggregate 接口(interface),虽然我不确定,但两者存在冲突。我也尝试使用 Iterator 接口(interface),但遇到了同样的问题。我该如何解决这个问题?
最佳答案
我在解决问题的模拟对象上禁用了自动加载。
$mockExceptionManager = $this->getMockBuilder('exceptionManager')
->disableAutoload()
->getMock();
关于php - 在使用 PHPUnit 进行测试时使用实现 IteratorAggregate 接口(interface)的 Mock 类时如何防止重新声明错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5098050/