期待异常后,PHPUnit不会继续测试
|
为什么 PHPUnit不会在此代码中执行最后的异常断言? public function testConfigOverriding()
{
$this->dependencyContainer = new DependencyContainer(__DIR__ . "/../../Resources/valid_json.json");
$this->assertEquals('overriden',$this->dependencyContainer->getConfig('shell_commander')['pygmentize_command']);
$unexisting = "unexisting_file";
$this->setExpectedException('Exception',"Configuration file at path "$unexisting" doesn't exist.");
$this->dependencyContainer = new DependencyContainer($unexisting);
$invalid = __DIR . "/../../Resources/invalid_json.json";
$this->setExpectedException('Exception',"Configuration JSON file provided is not valid.");
$this->dependencyContainer = new DependencyContainer($invalid);
}
所以基本上是:它测试是否抛出了“unexsisting_file”异常,但完全忽略“无效的json”测试.我需要针对每个抛出的异常进行单独的测试吗? 即使使用setExpectedException,您的测试仍然是常规的PHP代码,并遵循PHP的正常规则.如果抛出异常,程序流将立即跳出当前上下文,直到达到一个try / catch块.在PHPUnit中,当您使用setExpectedException时,它会告诉PHPUnit的核心,当它应该期待即将运行的代码中的异常时.因此,它会使用try / catch块等待它,如果捕获被调用的异常类型,则传递测试. 但是,在测试方法中,正常的PHP规则仍然适用 – 当异常发生时,这是当前代码块的结尾.除非您在测试方法中有自己的try / catch块,否则不会再执行该方法. 所以,为了测试多个异常,你有几个选择: >将自己的try / catch添加到测试方法中,以便在第一个例外之后,您可以在该方法中继续进行进一步的测试. /**
* @dataProvider providerConfigOverriding
*/
public function testConfigOverriding($filename,$expectedExceptionText) {
$this->dependencyContainer = new DependencyContainer(__DIR__ . "/../../Resources/valid_json.json");
$this->assertEquals('overriden',$this->dependencyContainer->getConfig('shell_commander')['pygmentize_command']);
$this->setExpectedException('Exception',$expectedExceptionText);
$this->dependencyContainer = new DependencyContainer($filename);
}
public function providerConfigOverriding() {
return array(
array('unexisting_file','Configuration file at path "unexisting_file" doesn't exist.'),array(__DIR__ . "/../../Resources/invalid_json.json","Configuration JSON file provided is not valid."),);
}
希望有帮助. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
