忽略PHPUnit中的PHP警告

som*_*web 19 php phpunit unit-testing

我使用PHPUnit对我的函数进行单元测试,当代码中出现任何警告时,不会对该函数执行测试脚本,任何人都可以告诉我如何忽略警告并继续测试

hak*_*kre 32

正如Juhana评论的那样,您应该首先修复出现警告的代码.这表明代码无法正常/严格地运行.

默认情况下,PHPUnit将在执行测试期间触发的PHP错误,警告和通知转换为异常.

请参阅测试PHP错误,其中包含有关如何测试警告的更多信息(以及如何忽略在测试中调用的子例程中的警告).

要禁用默认行为,您可以setUp通过在全局命名空间中设置静态变量来告诉PHPUnit在测试中执行此操作,例如在测试或测试本身中:

# Warning:
PHPUnit_Framework_Error_Warning::$enabled = FALSE;

# notice, strict:
PHPUnit_Framework_Error_Notice::$enabled = FALSE;
Run Code Online (Sandbox Code Playgroud)

更改默认行为的另一个选项是使用具有以下设置的XML文件配置testrunner:

<phpunit convertErrorsToExceptions="false"
         convertNoticesToExceptions="false"
         convertWarningsToExceptions="false">
</phpunit>
Run Code Online (Sandbox Code Playgroud)

这三个选项不可用作命令行开关.

另请参阅相关问题:测试使用PHPUnit触发错误的方法的返回值.

  • 我试图用它来测试vfsStream的一些文件操作.禁用PHP_Unit异常不起作用(因为某些不支持的chmod()而需要).毕竟我必须使用好的老沉默操作符'@'. (2认同)

Cou*_*les 7

在每个测试级别执行此操作的记录策略是,@当您的测试调用将触发警告或通知的函数时,使用错误抑制运算符。

以下代码是PHPUnit 文档中的示例:

<?php
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase
{
    public function testFileWriting() {
        $writer = new FileWriter;
        $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff'));
    }
}
class FileWriter
{
    public function write($file, $content) {
        $file = fopen($file, 'w');
        if($file == false) {
            return false;
        }
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)