Symfony服务器忽略unittest中的catch块

时间:2016-12-10 19:28:17

标签: php ldap phpunit symfony

目前我使用phpunit为我的symfony项目编写了一些测试。

我想测试服务器是否正确处理特殊问题。 服务器尝试将邮件添加到组。但该组织不存在。所以ldap_mod_add会抛出异常。在代码中,我捕获异常并创建组,以便可以将邮件添加到其中。

如果我尝试没有phpunit的代码,它可以正常工作。但是使用phpunit,服务器会忽略catch块。

继承人的职能

//Add
try
{
    ldap_mod_add($this->ldapCon,"mail=$forward,$ldaptree",$forward_info);
}
catch (ContextErrorException $e)
{
    //Check if the forward exist
    $forwardGroup = $this->getForwardForMail($forward);
    if($forwardGroup == [])
    {
        $this->logger->addAlert("Forward $forward does not exist");
        $this->session->getFlashBag()->add("notice","We added the group $forward, because it did not exist.");
        //Create forward and add the first mail
        $this->createForward($forward,$mail);
        return;
    }
    throw new AllreadyInGroupException("User already in forward $forward");
}

我禁用了convertWarningsToExceptions选项,这样即使php因为不存在的组而发出警告,测试也会继续进行。

那么为什么服务器会用phpunit忽略catch块?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

检查抛出的异常的实际类。

仅当ContextErrorException处于活动状态时,Symfony才会抛出ErrorHandler,这可能不是PHPUnit运行的单元测试中的情况。

尝试捕捉\ErrorException

我会保持convertWarningsToExceptions一致行为。没有它,你的转发逻辑将无法在测试中工作(如果只发出一个普通的PHP警告,catch块将不会运行)。