catch 块内的 PHPUnit 测试代码

Nic*_*dis 6 testing phpunit unit-testing functional-testing symfony

我有一个使用 try...catch 的 Symfony 控制器。我使用 phpunit 来测试我的应用程序。我已经搜索过,但还没有找到如何在 catch 异常中测试代码的方法。如何强制 php 单元假装出现问题并进入 catch 块并对其进行测试?

IE:

 try {
      $foo = 1;
     } catch (\Exception $ex) {
        $mail = new Mail();
        $mail->sendMail();
        return new Response();
    }
Run Code Online (Sandbox Code Playgroud)

我如何告诉 phpunit 抛出 \Exception 以便它测试上面的 catch 块内的代码?

Ale*_*lec 2

好吧,在这些条件下,它显然不会抛出任何异常,但请考虑您的 try/catch 所在的函数。您需要对该函数进行单元测试,并提供将导致其失败的参数,并捕获。

例如:

public function doStuff($argument) {
    try {
        $parsed = (int)$argument; //but what if $argument is a string with letters
    } catch (\Exception $ex) {
        //do stuff
    }
Run Code Online (Sandbox Code Playgroud)

要测试当你搞砸时是否抛出异常:

public function testDoStuff() {
    // get a mock of the class, let's just call it $mock
    // do some regular asserts if you want
    
    $this->setExpectedException('\Exception');
    $mock->doStuff("haha, you can't parse this");
}
Run Code Online (Sandbox Code Playgroud)