这是我写一个测试套件(它扩展mysqli的)类的构造函数:
function __construct(Config $c)
{
// store config file
$this->config = $c;
// do mysqli constructor
parent::__construct(
$this->config['db_host'],
$this->config['db_user'],
$this->config['db_pass'],
$this->config['db_dbname']
);
}
该Config
传递给构造类实现arrayaccess
内置于PHP接口:
class Config implements arrayaccess{...}
如何嘲笑/存根Config
对象? 我应该使用,为什么?
提前致谢!
如果你可以轻松地创建一个Config
从一个数组实例,这将是我的偏好。 当你想在哪里隔离实用,简单的合作者如来测试您的单位Config
应该是足够安全的测试中使用。 设置它的代码可能会更容易读写(不易出错)比同等的模拟对象。
$configValues = array(
'db_host' => '...',
'db_user' => '...',
'db_pass' => '...',
'db_dbname' => '...',
);
$config = new Config($configValues);
话虽这么说,你嘲笑实施对象ArrayAccess
就像你任何其他对象。
$config = $this->getMock('Config', array('offsetGet'));
$config->expects($this->any())
->method('offsetGet')
->will($this->returnCallback(
function ($key) use ($configValues) {
return $configValues[$key];
}
);
您还可以使用at
强加访问的特定顺序,但是你让测试很脆的方式。
文章来源: Mocking/Stubbing an Object of a class that implements arrayaccess in PHPUnit