PHPUnit抛出;警告:日期():它不安全;

PHPUnit抛出;警告:日期():它不安全;,phpunit,warnings,Phpunit,Warnings,当运行phpunit--coverage html时,我会得到关于时区的著名警告 PHP警告:date():依赖系统的时区是不安全的 设置。您需要使用date.timezone设置或 date\u default\u timezone\u set()函数。万一你用了这些 方法,您很可能仍会收到此警告 拼错了时区标识符。我们选择的时区为“UTC” 现在,请设置date.timezone以选择您的时区 一切都按预期进行,但却变得很烦人 当然,我可以通过更改我的php.ini来解决这个问题,但是如果可

当运行
phpunit--coverage html
时,我会得到关于时区的著名警告

PHP警告:date():依赖系统的时区是不安全的 设置。您需要使用date.timezone设置或 date\u default\u timezone\u set()函数。万一你用了这些 方法,您很可能仍会收到此警告 拼错了时区标识符。我们选择的时区为“UTC” 现在,请设置date.timezone以选择您的时区

一切都按预期进行,但却变得很烦人

当然,我可以通过更改我的
php.ini
来解决这个问题,但是如果可能的话,我更愿意避免它,以保持一些服务器不可知论。此外,我不想阻止由可测试代码触发的警告出现


有没有办法只为内部PHPUnit操作定义默认时区?

我在bootstrap.php文件中设置了时区

<?php
// PHP and Web server settings
error_reporting(E_ALL | E_STRICT);
date_default_timezone_set("America/Toronto");       // Set the default timezone
$_SERVER['SERVER_NAME'] = 'http://myserver';       // Set Web Server name

// Process the Include Path to allow the additional application to be set.
$IncludePaths = explode( PATH_SEPARATOR, get_include_path() );
$NewIncludePaths = array_merge( $IncludePaths, array(dirname(__FILE__) ));
set_include_path( implode( PATH_SEPARATOR, array_unique($NewIncludePaths)));    // Update Include Path

//define('PHPUNIT_RUNNING', 1); // Indicate to the code that Automated Testing is running.
?>


但是这样,如果我的代码中存在不安全的
date()
,它会发出警报吗?@simbirsk我不相信会,因为时区现在是用PHP设置的。此设置与在INI文件中设置时区相同。这正是问题所在,如果可能的话,我不想屏蔽代码抛出的任何警告。@simbirsk生产代码将发送警告,而您的测试代码将不会。但是,生产代码不应该通过此警告,因为您不希望最终用户看到它。可能更好地处理它,并发送一封内部电子邮件或解决问题的东西。但是在测试时,警告不是问题,您可以测试是否设置了正确的时区,或者设置了错误的时区,以确保bootstrap.php正常工作。