我有一个使用try ... catch的Symfony控制器。 我使用phpunit来测试我的应用程序。我搜索过但没有找到一种方法来测试catch异常中的代码。我如何强制php单位假装出现问题并进入catch块并对其进行测试?
即:
{{1}}
我怎么能告诉phpunit抛出一个\ Exception所以它会在上面的catch块中测试代码?
答案 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
块中确实有一些复杂的东西,你可以将它移动到控制器的单独保护方法并单独测试它。您可以使用反射轻松访问其类之外的受保护方法。