2016-12-10 4 views
0

私のsymfonyプロジェクトのphpunitでいくつかのテストを行います。Symfonyサーバはunittestのcatchブロックを無視します

サーバーが特別な問題を正しく処理しているかどうかをテストします。 サーバーはグループにメールを追加しようとします。しかし、そのグループは存在しません。したがって、ldap_mod_addは例外をスローします。コードでは、私は例外をキャッチし、メールを追加できるようにグループを作成します。

私はphpunitなしでコードを試してもうまくいきます。しかしphpunitでは、サーバーはcatchブロックを無視します。

相続人のテストは、PHPがあるため、既存のないグループの警告を与えても、上に行くだろうように、私はconvertWarningsToExceptionsオプションを無効に機能

//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"); 
} 

なぜサーバーはphpunitでキャッチブロックを無視しますか?

がスローされた例外の実際のクラスを確認してくださいあなたの助け

答えて

1

、ありがとうございました。

symfonyは、ErrorHandlerがアクティブな場合のみ、ContextErrorExceptionをスローします。これは、PHPUnitによって実行される単体テストの場合には当てはまりません。

代わりに\ErrorExceptionをキャッチしてみてください。

私は一貫性のある動作のためにconvertWarningsToExceptionsを有効にしておきます。それがなければ、あなたの転送ロジックはテストでは機能しません(普通のPHP警告だけが出されればcatchブロックは実行されません)。

+0

catchブロックの引数を置き換えようとしました。しかし、これは役に立たない。しかし、私は理由を知っています。 ldap_mod_addは例外をスローしません。それは偽を返すだけであり、警告を生成します。例外はSymfonyからのものです。しかし、最高の解決策は何ですか? ifブロックとcatchブロックを使用してfalseと例外をキャッチする必要がありますか? Symfonyでも例外に対する警告を無効にすることはできますか? – leet

+0

* 'convertWarningsToExceptions'を無効にしているので、falseを返します。 – ShiraNai7

関連する問題