gpt4 book ai didi

php - 模拟/ stub 一个在 PHPUnit 中实现 arrayaccess 的类的对象

转载 作者:可可西里 更新时间:2023-11-01 12:30:25 27 4
gpt4 key购买 nike

这是我正在为其编写测试套件的类的构造函数(它扩展了 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 类实现了 php 内置的 arrayaccess 接口(interface):

class Config implements arrayaccess{...}

如何模拟/ stub 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 来强加特定的访问顺序,但那样会使测试变得非常脆弱。

关于php - 模拟/ stub 一个在 PHPUnit 中实现 arrayaccess 的类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com