我试着看看我的控制器是否抛出异常
在我的控制器中,我有一个“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 回答
看起来你正在使用dataProvider来允许testAction迭代潜在的输入数据 - 因此输出中的
with data set
ApplicationTest\Controller\myControllerTest::testIndexAction with data set #0 (false, '', 1)
我猜测你的数据提供程序提供了一些成功的情况,因此不应该触发异常,有些情况应该触发异常,如果你总是或者从不告诉PHPUnit期望导致失败例外 .
我对这类情况的典型方法是将异常作为参数之一传递给测试函数,并使用
NULL
来表示不应该出现异常的情况 . 然后,您可以在测试函数中使用类似以下的构造,以便有条件地期望异常: