2011-07-01 14 views
6

ユーザが正しいポストパラメータなしで/ user/validateにアクセスすると、ZendアプリケーションがZend例外をスローします。 (私は標準で "エラーが発生しました"というメッセージが表示され、レイアウト内に枠がついています)。これは意図的です。PHPUnitとZend Frameworkによる例外テストの問題

私は今、PHPUnitでその動作をテストしようとしています。ここに私のテストがあります:

/** 
* @expectedException Zend_Exception 
*/ 
public function testEmptyUserValidationParametersCauseException() { 
    $this->dispatch('/user/validate'); 
} 

私がテストを実行すると、「期待される例外Zend_Exception」というメッセージが表示されます。何か案は?

ファイル内に他のテストがあり、正常に動作しています...

ありがとう!

答えて

5

Zend_Controller_Plugin_ErrorHandlerプラグインが例外を処理し、デフォルトのError_Controllerが500のリダイレクトを強制します。これは、テストしている例外が存在しなくなる可能性があります。以下のユニットテストを試してみて、それが通るかどうかを確認:

public function testUnknownUserRedirectsToErrorPage() 
{ 
    $this->dispatch('/user/validate'); 
    $this->assertController('error'); 
    $this->assertAction('error'); 
    $this->assertResponseCode('500'); 
} 

これが、その後動作する場合、それは時間によってエラー・ビューをレンダリングしているそれは、リダイレクトする前に、コードに含まれているように例外がもはや存在することを示していません。

+0

ありがとうtomjowitt!あなたはそれを1つで持っています! –

+0

symfonyの 'sfBrowser-> getCurrentException()'と同様に、キャッチされない例外を取得する方法はありますか?正しい例外がスローされていることを確認することも有益でしょう。 –

2

例外がスローされないため、単に失敗する可能性があります。

"@expectedException Zend_Exception"を付けずにテストを実行しようとしましたか?例外はありますか?

+0

欠落しているが予期されている例外を診断するための提案は+1です。おそらく、アノテーションを削除した後にテストパスが表示されます。エラーコントローラーに関するもう1つの答えは正しい可能性があります。 –

関連する問題