PHPUnit让我使用以下任一方法创建一个方法存根来抛出异常:
[->will($this->throwException(..)][1]
->willThrowException(..
我需要测试方法存根抛出PHP错误的一些情况。
PHPUnit是否支持这样的东西?这里有变通方法吗?
答案 0 :(得分:5)
PHPUnit TestCase类中的throwException()可以将Throwable的任何实例作为参数。
这意味着,
->will($this->throwException(new Error()));
->will($this->throwException(new Exception()));
都有效
答案 1 :(得分:2)
只是触发错误:
$foo
->expects($this->once())
->method('bar')
->willReturnCallback(function () {
trigger_error(
'Now really is not a good time',
E_USER_ERROR
);
});
供参考,见:
答案 2 :(得分:2)
你可以在测试中使函数抛出异常,如下所示:
$handlerConsentMessage = $this->getMockBuilder('YourClass')
->setMethods(array('yourMethod'))->getMock();
$handlerConsentMessage->method('yourMethod')->willThrowException(new Exception());
$handlerConsentMessage->run('functionToRun');
现在当你运行测试函数functionToRun时,如果调用了函数YourMethod,它将抛出异常。
答案 3 :(得分:-1)
高质量代码在正常工作期间不会产生任何PHP错误(通知,警告,致命错误,解析错误)。如果它仍然产生错误 - 您应该尝试检测此类边缘情况并抛出异常/返回不同的结果。然后,这些异常在PHPUnit测试中很容易被模拟。
其他解决方法,如果无法修改测试类,则是在测试中定义错误侦听器,请参阅set_error_handler。逻辑应遵循: