忽略PHPUnit中的PHP警告
我正在使用PHPUnit对我的函数进行单元测试当代码中出现任何警告时,测试脚本将不会针对该函数执行,有人能告诉我如何忽略这些警告并继续测试吗?正如Juhana评论的那样,您应该首先修复出现警告的代码。这是代码工作不正常/不严格的迹象 默认情况下,PHPUnit将测试执行期间触发的PHP错误、警告和通知转换为异常 请参阅其中的详细信息,了解如何测试警告(以及如何忽略在测试中调用的子例程中的警告) 要禁用默认行为,您可以告诉PHPUnit在测试中这样做,例如在测试的忽略PHPUnit中的PHP警告,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我正在使用PHPUnit对我的函数进行单元测试当代码中出现任何警告时,测试脚本将不会针对该函数执行,有人能告诉我如何忽略这些警告并继续测试吗?正如Juhana评论的那样,您应该首先修复出现警告的代码。这是代码工作不正常/不严格的迹象 默认情况下,PHPUnit将测试执行期间触发的PHP错误、警告和通知转换为异常 请参阅其中的详细信息,了解如何测试警告(以及如何忽略在测试中调用的子例程中的警告) 要禁用默认行为,您可以告诉PHPUnit在测试中这样做,例如在测试的设置中,或者通过在全局命名空间中设
设置中,或者通过在全局命名空间中设置静态变量来禁用测试本身:
# Warning:
PHPUnit_Framework_Error_Warning::$enabled = FALSE;
# notice, strict:
PHPUnit_Framework_Error_Notice::$enabled = FALSE;
更改默认行为的另一个选项是使用以下设置:
<phpunit convertErrorsToExceptions="false"
convertNoticesToExceptions="false"
convertWarningsToExceptions="false">
</phpunit>
这三个选项不能作为命令行开关使用
另请参见相关问题:。在每个测试级别执行此操作的文档化策略是,当您的测试调用将触发警告或通知的函数时,使用@
错误抑制操作符
以下代码是来自的示例:
您不应该忽略警告,它们存在是有原因的。话虽如此,警告和通知并不是致命的(如果它们是致命的,那就是一个错误)
您应该在单元测试中测试警告,而不是忽略警告。您可以使用(MIT许可证)来完成此操作。通过对PHPUnit的此扩展,您可以直接测试触发的错误/警告,而无需将它们转换为异常:
composer需要netsilik/base测试用例
测试E\u用户通知
:
<?php
namespace Tests;
class MyTestCase extends \Netsilik\Testing\BaseTestCase
{
/**
* {@inheritDoc}
*/
public function __construct($name = null, array $data = [], $dataName = '')
{
parent::__construct($name, $data, $dataName);
$this->_convertNoticesToExceptions = false;
$this->_convertWarningsToExceptions = false;
$this->_convertErrorsToExceptions = true;
}
public function test_whenNoticeTriggered_weCanTestForIt()
{
$foo = new Foo();
$foo->bar();
self::assertErrorTriggered(E_USER_NOTICE, 'The warning string');
}
}
在我看来,单元测试工作正常。修复代码,使其不会抛出警告或错误。@Juhana:我只需要返回函数的值,而不关心警告。正在测试的函数工作正常。在团队工作环境中,您有时只需要测试自己的捆绑包,而没有时间/凭证/任务来清理其他捆绑包(这可能会因为警告存在而抛出警告,甚至不会调用它们),因此当您只想测试特定函数时,“修复代码”注释似乎不相关。thank u可能与“#notice,strict:PHPUnit_Framework_Error_notice:$enabled=FALSE;”重复我试着用它来测试vfstream的一些文件操作。禁用PHP_单元异常不起作用(因为某些chmod()不受支持而需要)。毕竟,我必须使用好的旧静默运算符“@”。
<?php
namespace Tests;
class MyTestCase extends \Netsilik\Testing\BaseTestCase
{
/**
* {@inheritDoc}
*/
public function __construct($name = null, array $data = [], $dataName = '')
{
parent::__construct($name, $data, $dataName);
$this->_convertNoticesToExceptions = false;
$this->_convertWarningsToExceptions = false;
$this->_convertErrorsToExceptions = true;
}
public function test_whenNoticeTriggered_weCanTestForIt()
{
$foo = new Foo();
$foo->bar();
self::assertErrorTriggered(E_USER_NOTICE, 'The warning string');
}
}