忽略PHPUnit中的PHP警告

忽略PHPUnit中的PHP警告,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我正在使用PHPUnit对我的函数进行单元测试当代码中出现任何警告时,测试脚本将不会针对该函数执行,有人能告诉我如何忽略这些警告并继续测试吗?正如Juhana评论的那样,您应该首先修复出现警告的代码。这是代码工作不正常/不严格的迹象 默认情况下,PHPUnit将测试执行期间触发的PHP错误、警告和通知转换为异常 请参阅其中的详细信息,了解如何测试警告(以及如何忽略在测试中调用的子例程中的警告) 要禁用默认行为,您可以告诉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');
    }
}