同じ問題に遭遇しました。expectedException
何らかの理由で、PHPUnitでは一般的な例外を設定できません。その理由はわかりません。個人的には、例外を区別するたびに新しい例外クラスを作成するよりも、カスタム例外コードをスローすることを選択しています。
これが私がそれを回避した方法です:
/**
* @expectedException Test_Exception
*/
public function testDivByZero()
{
try {
// Fyi you don't need to do an assert test here, as we are only testing the exception, so just make the call
$result = $this->object->div(1,0);
} catch (Exception $e) {
if ('Exception' === get_class($e)) {
throw new Test_Exception($e->getMessage(), $e->getCode());
}
}
}
// Test_Exception.php
class Test_Exception extends Exception
{
public function __construct($message = null, $code = 0, Exception $previous = null)
{
parent::__construct($message, $code, $previous);
}
}
これにより、コードを好きなように設計し、「一般的な」例外をスローできます。基本的には Exception クラスをテストするだけで、それがジェネリックである場合は、別の例外として再ラップします。Test_Exception.
- アップデート -
昨日、現在の「マスター」ブランチで一般的な例外制限が削除されたことがわかりました。これは 3.7 になります。どうやら主任エンジニアは 3.6 にパッチを当てたくないようです。