php - 在使用 PHPUnit 进行测试时使用实现 IteratorAggregate 接口(interface)的 Mock 类时如何防止重新声明错误?

标签 php unit-testing mocking phpunit

我正在编写依赖于外部类 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/

相关文章:

php - 用于验证 facebook 页面 url 的正则表达式

php - 使用php跨服务器的mysqli连接错误

php - IE 中的innerHTML?

javascript - 如何验证是否使用 Selenium 在 javascript 对象上调用了某些方法?

Python 模拟、django 和请求

java - 我们可以从前端html页面在Linux服务器中创建文件吗?

python - 在没有 manage.py 的情况下从 Django 库运行单元测试

ios - 使用单元测试时遇到问题

java - EasyMock中的 ".andReturn(...).anyTimes()"和 ".andStubReturn(...)"有区别吗?

python - 如何使用 Python 测试 API 客户端?