我试着看看我的控制器是否抛出异常
在我的控制器中,我有一个"抛出新的\ 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
答案 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);
}