忽略 PHPUnit 中的 PHP 警告

2022-08-30 16:05:26

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


答案 1

正如Juhana所评论的那样,您首先应该修复出现警告的代码。这表明代码无法正常工作/严格。

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

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

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

# Warning:
PHPUnit_Framework_Error_Warning::$enabled = FALSE;

# notice, strict:
PHPUnit_Framework_Error_Notice::$enabled = FALSE;

更改默认行为的另一个选项是使用以下设置的 XML 文件配置测试运行程序

<phpunit convertErrorsToExceptions="false"
         convertNoticesToExceptions="false"
         convertWarningsToExceptions="false">
</phpunit>

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

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


答案 2

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

以下代码是 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;
        }
        // ...
    }
}

推荐