gpt4 book ai didi

php - 在 PHPUnit 中测试包含文件或本地文件

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

我在一个类中有一个简单的方法,它执行以下操作

 class ToBeTested
{
public function getLocalSettings()
{
require_once 'local.php';

return (isset($configSetting['foo'])) ? true : false;
}
}

在 local.php 中

 <?
$configSetting = array(
'foo' => '1',
'bar' => 'false',
);

我希望为 getLocalSettings 创建单元测试。我意识到这有点像依赖注入(inject),但我不太清楚应该如何编写测试。这似乎是一个非常微不足道的代码块,使测试变得过于复杂,但我可以自由重构,但是在这里,我想用我自己的值/数据提供程序替换“local.php”以进行测试

编辑清晰度/评论

我在这里使用一个配置作为示例,但我们实际使用的是一个巨大的文件,它从数据库输出并作为数据源包含在内,并在此函数中进行解析。我写了一个简化版本以避免使问题过于复杂,但包含的数组是几个 megs 而不是实际上“只是一个配置文件”。不幸的是,提供不同方法来处理文件配置的解决方案并没有帮助,但是注入(inject)这个数组的方法会很好用(但在某些时候我需要运行那个'require'。

谢谢

最佳答案

您应该通过构造函数或 setter 将您的配置数组注入(inject)到 ToBeTested 类中。这将消除由 getLocalSettings(包含另一个文件)引起的副作用,并允许您在测试时模拟设置。您的类定义可能如下所示:

class ToBeTested
{
private $localSettings;

public function __construct($localSettings)
{
$this->localSettings = $localSettings;
}
}

然后,当通过正常使用实例化此类时,您只需将配置数组提供给构造函数(local.php 的包含应该在 Bootstrap 代码中完成)。当你想对类进行单元测试时,你可以在实例化它时注入(inject)任何你需要的设置,并且你不会硬依赖文件系统。为此,您可以选择使用 PHPUnit ( documentation) 中的数据提供程序功能。

关于php - 在 PHPUnit 中测试包含文件或本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209147/

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