使用单元测试捕获来自标准 PHP 函数的错误消息

Catch error messages from standard PHP functions with a Unit test

标题有点不清楚,但我们开始吧。

我正在 运行 对本质上运行 strpos() 的方法进行单元测试。像这样:

return strpos($this->getHeaderLine($headerName), $value) !== false;

现在我还想看看如果我提供一个空值会发生什么。当提供空字符串时,我收到以下消息:

strpos(): Empty needle

这条消息本身已经很清楚了,我不想在这里抛出异常。我确实想知道它是否返回了这条消息。我将如何着手进行此操作,还是需要重写我的方法?

尝试以下操作:

public function testWarning()
{
    $this->expectException(PHPUnit_Framework_Error_Warning::class);
    $this->expectExceptionMessage("Empty needle");
    strpos('meh', '');
}

这个测试通过了,但是如果你注释掉期望值,它就失败了。 PHPUnit框架中还有更多相关的类,如PHPUnit_Framework_Error_DeprecatedPHPUnit_Framework_Error_Notice等。