gpt4 book ai didi

exception - PHPUnit 模拟异常

转载 作者:行者123 更新时间:2023-12-04 14:58:11 25 4
gpt4 key购买 nike

我有一个处理错误的类,包括异常。如果捕获到异常,我会将异常作为参数传递给我的异常/错误处理程序。

try {
someTrowingFnc();
} catch (\Exception $e) {
this->error->exception($e);
}

现在我想对这个错误处理程序进行单元测试并模拟异常。

我发现很难模拟异常,以便我可以控制异常消息、文件和行。
$exceptionMock = $this->getMock('Exception', array(
'getFile',
'getLine',
'getMessage',
'getTrace'
)); // Tried all mock arguments like disable callOriginalConstructor

$exceptionMock->expects($this->any())
->method('getFile')
->willReturn('/file/name');

$exceptionMock->expects($this->any())
->method('getLine')
->willReturn('3069');

$exceptionMock->expects($this->any())
->method('getMessage')
->willReturn('Error test');

下面代码的结果总是返回NULL
$file   = $exception->getFile();
$line = $exception->getLine();
$msg = $exception->getMessage();

是否有解决方法来模拟异常或者我只是做错了什么?

最佳答案

返回错误详细信息的 Exception 类方法,例如 getFile()等被定义/声明为final方法。这是 PHPUnit 目前在模拟 protected 、私有(private)和 final方法中的一个限制。

Limitations
Please note that final, private and static methods cannot be stubbed or mocked. They are ignored by PHPUnit's test double functionality and retain their original behavior.

如此处所示: https://phpunit.de/manual/current/en/test-doubles.html

关于exception - PHPUnit 模拟异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com