catchUnit中的PHPUnit测试代码

时间:2016-05-04 23:37:56

标签: unit-testing symfony testing phpunit functional-testing

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

即:

{{1}}

我怎么能告诉phpunit抛出一个\ Exception所以它会在上面的catch块中测试代码?

2 个答案:

答案 0 :(得分:1)

那么,在这些情况下,它显然不会抛出任何异常,但考虑你的try / 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');
}

答案 1 :(得分:0)

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