首页 文章

ZF2 PHPUnit断言异常

提问于
浏览
2

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

在我的控制器中,我有一个“throw new \ 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,数据集#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 / EventMa nager / 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

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

    我猜测你的数据提供程序提供了一些成功的情况,因此不应该触发异常,有些情况应该触发异常,如果你总是或者从不告诉PHPUnit期望导致失败例外 .

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

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

相关问题