抛出错误phpunit的模拟方法
PHPUnit让我创建一个方法存根来抛出异常,使用以下任一方法:抛出错误phpunit的模拟方法,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,PHPUnit让我创建一个方法存根来抛出异常,使用以下任一方法: [->将($this->throweexception(..)[1] ->willthroweexception(.. 我需要测试一些方法存根抛出PHP错误的情况 PHPUnit是否支持类似的操作?这里有解决方法吗?PHPUnit测试用例类中的throwException()可以将Throwable的任何实例作为参数 这就是说, ->will($this->throwException(new Error()));
[->将($this->throweexception(..)[1]
->willthroweexception(..
->will($this->throwException(new Error()));
->will($this->throwException(new Exception()));
两者都有效只会触发一个错误:
$foo
->expects($this->once())
->method('bar')
->willReturnCallback(function () {
trigger_error(
'Now really is not a good time',
E_USER_ERROR
);
});
有关参考,请参阅:
您可以使测试中的函数抛出异常,如下所示:
$handlerConsentMessage = $this->getMockBuilder('YourClass')
->setMethods(array('yourMethod'))->getMock();
$handlerConsentMessage->method('yourMethod')->willThrowException(new Exception());
$handlerConsentMessage->run('functionToRun');
现在,当您运行测试函数functionToRun时,如果调用了函数YourMethod,它将抛出一个异常。这是什么意思?您可以抛出异常,也可以触发错误。我的语义可能不正确。但是,我想通过存根抛出/触发错误来实现。我自己回答了。请注意,这只适用于PHP 7及以上版本,请参阅。顺便说一下,您可以使用
willThrowException()
。不,willThrowException()只能将异常类型作为参数,而不是错误。仅供参考,willThrowException()
方法现在接受PHPUnit 8上的\Throwable
而不仅仅是\Exception
(至少8.2,没有在早期版本上尝试过)@NikhilKuriakose:如果这回答了问题,请将其标记为“答案”。很好,现在它变得有趣了。我假设这两种行为(你的答案和我的答案)将给出完全相同的输出?哈,你的肯定更好,在PHP7上更有意义。还没有必要模拟触发错误(而不是抛出异常),所以我没有真正使用我之前在这里建议的内容。但是,这很好。我搜索了数小时的答案,突然我有了两个:)谢谢!!!很高兴你喜欢它!经常问别人是有意义的,呵呵!谢谢,但我正在开发一个库,它可能会有来自客户端的未处理异常/抛出错误。好的,那么要处理任何类型的错误,可以使用@expectedException PHPUnit\Framework\Error annotation()或者,如果您对检测生成的错误感兴趣,那么设置错误处理程序总是有帮助的