我在类中有一个简单的方法,可以执行以下操作
class ToBeTested
{
public function getLocalSettings()
{
require_once 'local.php';
return (isset($configSetting['foo'])) ? true : false;
}
}
在local.php中
<?
$configSetting = array(
'foo' => '1',
'bar' => 'false',
);
我正在寻找为getLocalSettings创建单元测试。我意识到这有点像依赖注入,但我不能完全理解我应该如何编写测试。看起来像是一个非常简单的代码块,让测试变得过于复杂,但是我可以自由地重构,并且我想用我自己的值/数据提供者替换'local.php'以进行测试
编辑清晰度/评论
我在这里使用了配置作为示例,但我们实际使用的是一个巨大的文件,它从数据库输出并作为数据源包含,并在此函数中进行解析。我写了一个简化版本,以避免过于复杂的问题,但包含的数组是几个megs而不是实际上只是一个配置文件。不幸的是,提供处理文件配置的不同方法的解决方案没有帮助,但注入此数组的方法可以正常工作(但在某些时候我需要运行'require'。
由于
答案 0 :(得分:4)
您应该通过构造函数或setter将配置数组注入ToBeTested
类。这将消除由getLocalSettings
(包含另一个文件)引起的副作用,并允许您在测试时模拟设置。
您的类定义可能如下所示:
class ToBeTested
{
private $localSettings;
public function __construct($localSettings)
{
$this->localSettings = $localSettings;
}
}
然后,在通过正常使用实例化此类时,您只需将配置数组提供给构造函数(包含local.php
应该在引导代码中完成)。
当你想对类进行单元测试时,你可以在实例化它时注入你需要的任何设置集,并且你对文件系统没有硬性依赖。您可以选择在PHPUnit(documentation)中使用数据提供程序功能。