目前我使用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块?
感谢您的帮助
答案 0 :(得分:1)
检查抛出的异常的实际类。
仅当ContextErrorException
处于活动状态时,Symfony才会抛出ErrorHandler
,这可能不是PHPUnit运行的单元测试中的情况。
尝试捕捉\ErrorException
。
我会保持convertWarningsToExceptions
一致行为。没有它,你的转发逻辑将无法在测试中工作(如果只发出一个普通的PHP警告,catch块将不会运行)。