加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

期待异常后,PHPUnit不会继续测试

发布时间:2020-05-31 01:32:46 所属栏目:PHP 来源:互联网
导读:为什么 PHPUnit不会在此代码中执行最后的异常断言? public function testConfigOverriding(){ $this-dependencyContainer = new DependencyContainer(__DIR__ . /../../Resources/valid_json.json); $this-assertEquals(o

为什么 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添加到测试方法中,以便在第一个例外之后,您可以在该方法中继续进行进一步的测试.
>将测试分成单独的方法,以便每个异常都在自己的测试中.
>这个特殊的例子看起来好像是使用PHPUnit的dataProvider机制,因为你基本上是用两组数据来测试相同的功能. dataProvider功能允许您定义一个单独的函数,其中包含要测试的每组值的输入数据数组.然后将这些值一次传递到测试方法中.你的代码看起来像这样:

/**
 * @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."),);
}

希望有帮助.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读