Unit testing catch块内的PHPUnit测试代码

Unit testing catch块内的PHPUnit测试代码,unit-testing,symfony,testing,phpunit,functional-testing,Unit Testing,Symfony,Testing,Phpunit,Functional Testing,我有一个使用try…catch的Symfony控制器。 我使用phpunit来测试我的应用程序。我已经搜索过了,但还没有找到一种在catch异常中测试代码的方法。我怎样才能强迫php单元假装出了什么问题,并进入catch块并进行测试呢 即: 如何告诉PHPUnter抛出一个异常,以便在上面的catch块中测试代码?,在这些条件下,它显然不会抛出任何异常,但是请考虑您的尝试/捕获功能。您需要对该函数进行单元测试,并提供导致其失败的参数,然后捕获 例如: public function doStuf

我有一个使用try…catch的Symfony控制器。 我使用phpunit来测试我的应用程序。我已经搜索过了,但还没有找到一种在catch异常中测试代码的方法。我怎样才能强迫php单元假装出了什么问题,并进入catch块并进行测试呢

即:


如何告诉PHPUnter抛出一个异常,以便在上面的catch块中测试代码?

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

例如:

public function doStuff($argument) {
    try {
        $parsed = (int)$argument; //but what if $argument is a string with letters
    } catch (\Exception $ex) {
        //do stuff
    }
要测试在将异常搞糟时是否引发异常,请执行以下操作:

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');
}

如果您的
catch
块中确实有一些复杂的内容,您可以将其移动到控制器的单独受保护方法中,并单独测试它。您可以使用反射轻松访问其类外的受保护方法。

如果您的控制器在某些条件下引发异常,并且您希望对其进行测试,只需模拟这些条件。是的,您可以创建代码将在其中创建异常的条件。您的代码到底是什么?在实际应用程序中,必须有引发异常的东西。您需要模拟此部分以抛出异常。不过,如果你能给我们看一下代码就好了。
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');
}