ZF2 PHPUnit断言异常

时间:2015-08-04 08:12:04

标签: php zend-framework phpunit

我试着看看我的控制器是否抛出异常

在我的控制器中,我有一个"抛出新的\ RuntimeException"

在我的测试中,如果我输入setExpectedException(' RuntimeException'),如果完整测试失败,我的断言将失败

我该怎么办?

class myController extends AbstractActionController {
    public function indexAction() {
        ...
        throw new \RuntimeException;
    }
}

class myControllerTest extends AbstractHttpControllerTestCase {
    public function testIndexAction() {
        ...
        $this->setExpectedException('RuntimeException');
        ...
        $this->dispatch('/');
   }
}

输出' setExpectedException' :

  

1)ApplicationTest \ Controller \ myControllerTest :: testIndexAction失败   声明类型" \ RuntimeException"的异常扔了。

不带输出:

  

1)ApplicationTest \ Controller \ myControllerTest :: testIndexAction with   数据集#0(false,'',1)RuntimeException:

     

/home/bruno/public_html/jacuzzi/module/Application/src/Application/Controller/myController.php:60   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php:82   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:444   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:205   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php:118   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/Mvc/DispatchListener.php:93   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:444   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:205   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:314   /home/bruno/public_html/jacuzzi/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:282   /home/bruno/public_html/jacuzzi/module/Application/test/ApplicationTest/Controller/myControllerTest.php:188

PS:我使用ZF 2.4.4和PHPUnit 4.7.8

1 个答案:

答案 0 :(得分:0)

看起来您正在使用dataProvider来允许testAction迭代潜在的输入数据 - 因此输出with data set中的ApplicationTest\Controller\myControllerTest::testIndexAction with data set #0 (false, '', 1)

我猜测你的数据提供者提供了一些成功的案例,因此不应该触发异常,有些情况应该触发异常,如果你总是或者在任何一种情况下导致失败从不告诉PHPUnit期待异常。

我对这类案例的典型方法是将异常作为参数之一传递给测试函数,并使用NULL来表示不应该出现异常的情况。然后,您可以在测试函数中使用类似以下的构造,以便有条件地期望异常:

if ($expectedException !== null) {
    $this->setExpectedException($expectedException);
}