dongzj2015 2017-11-28 09:01
浏览 151
已采纳

在phpUnit中模拟异常

The method I am trying to test has a try catch like

try {
    $fooClass->doStuff(); // Throws \Lib\Custom\Exception
} 
catch (\Lib\Custom\Exception $exception) {
    return false;
}

I want to test if the return is false, but the custom exception is not loaded when my tests are executed.

Php unit has the option of mocking classes, but I can't seem to use this for Exceptions.

$exceptionMock= $this->getMockBuilder(\Lib\Custom\Exception::class)->getMock();

$fooClassMock = $this->getMockBuilder(fooClass::class)->getMock()
     ->method('doStuff')
     ->willThrowException($exceptionMock);

Gives me the folowing exception:

Argument 1 passed to 
PHPUnit_Framework_MockObject_Builder_InvocationMocker::willThrowException() 
must be an instance of Exception, instance of Mock_Exception_c4dd9394 given

How to properly mock this Exception to test the function?

  • 写回答

2条回答 默认 最新

  • dtkz3186 2017-11-28 17:49
    关注

    The reason that your test isn't working is because the class isn't known in the test. When that happens and you create a mock in PHPUnit, it does some trickery to create a class definition and then extends that to create the mock. Otherwise it would use the extend the class itself and you would not have had a problem.

    In this case, PHPUnit creates a fake \Lib\Custom\Exception and then uses that to create the mock. The fake class created doesn't extend anything (since it wouldn't know what to extend/implement). So the type hint in the willThrowException will not be matched because your mock object didn't extend Exception.

    This would happen with any type hinting for extended classes in PHPUnit if the class is not loaded in the test. In order to fix this, you need to have the class available in the test via a require, include, or autoloader.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 有偿求qftp工具。能连接,下载文件,发送代码,windows环境,最好qt6 要qt creator写的
  • ¥70 刚刚看到一个人的网站居然是通过cname访问的
  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!