gpt4 book ai didi

php - 通过单元测试验证配置文件?

转载 作者:行者123 更新时间:2023-11-28 20:37:04 24 4
gpt4 key购买 nike

我正在构建一个应用程序,用户可以在其中选择 config/timezones.php 中定义的时区之一:

return [
'malta' => 'Europe/Malta',
'manila' => 'Asia/Manila',
'newyork' => 'America/New_York',
];

这个文件有一个带有标识符和有效时区字符串的数组(找到 on PHP.net )

我正在尝试基于测试驱动开发来构建此应用程序,因此我很自然地编写了一个单元测试来检查当用户更改其时区时时间是否正确更改:

namespace Tests\Unit;

use Carbon\Carbon;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class TimeZoneTest extends TestCase
{

use RefreshDatabase;

/** @test */
public function the_date_and_time_will_be_displayed_based_on_the_timezone_of_the_user() {

$user = factory(\App\User::class)->create([
'timezone' => 'Asia/Manila' // +8 hours
]);

$date = Carbon::create(2018, 1, 1, 0, 0, 0); // 2018-01-01 00:00:00

$adjustedDate = $date->timezone($user->timezone)->format('Y-m-d H:i:s'); // +8 hours = 2018-01-01 08:00:00

$this->assertEquals('2018-01-01 08:00:00', $adjustedDate);
}
}

这工作正常,但问题来了:如果我在配置文件中输入错误,单元测试仍会通过,但应用程序会中断。

我可以简单地创建另一个单元测试,在其中循环并使用 in_array($timezone, timezone_identifiers_list()) 验证我的配置文件的项目,但我不确定它是否属于一个单元测试。在我看来,这只需要在提交您的代码或其他内容时验证一次。

我的问题:在部署到生产环境之前,我如何/在哪里/何时检查我的配置文件是否有效?

最佳答案

代码与应用程序配置协作,就像它与服务、数据库、系统调用等协作一样。在单元测试中,您应该独立于协作者测试代码,这意味着更改配置不应影响任何单元测试。

因此,要在配置不正确时断言失败,您需要进行集成测试 - 因为集成测试与合作者打交道。您将使用的集成测试取决于您在何处实现配置健全性检查。

比如有些项目把配置检查放在了前端 Controller 的最前面,这样一旦配置有假,就会立即异常处理。如果那是你的配置验证所在的地方,那么你会有类似的东西:

/**
* @expectedException ApplicationException
* @expectedExceptionCode 500
*/
function test_front_controller_explodes_with_500_error_when_booted_with_bad_configuration() {
$this->fail('unimplemented');
}

关于php - 通过单元测试验证配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50413234/

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