PHPにはいくつかのカスタム例外があります。
class MainException extends Exception {};
class ExceptionOne extends MainException {};
class ExceptionTwo extends MainException {};
そして、私はクラスで2つの簡単なメソッドでそれらを使用しています。
public function firstFunction($param) {
if ($some_condition) {
// do whatever
} else {
throw new ExceptionOne();
}
}
public function secondFunction($param) {
if ($some_condition) {
// do whatever
} else {
throw new ExceptionTwo();
}
}
私はまた、これに似た、両方の例外のPHPUnitテストを持っています:
public function testFirstException() {
try {
// anything
} catch (Exception $e) {
$this->assertType('ExceptionOne', $e);
$this->assertType('MainException', $e);
}
}
public function testSecondException() {
try {
// anything
} catch (Exception $e) {
$this->assertType('ExceptionTwo', $e);
$this->assertType('MainException', $e);
}
}
ブラウザーでクラスをテストし、意図的に関数を失敗させた場合(PHPUnitテストと同じもので)、必要に応じて表示さExceptionOne
れ、ExceptionTwo
発生します。ただし、PHPUnitでテストすると、常に失敗します。
1) testSecondException(SomeTest)
Failed asserting that <PHPUnit_Framework_ExpectationFailedException> is an instance of class "ExceptionTwo".
C:\test.php:67
67行目はそうですが
$this->assertType('ExceptionTwo', $e);
、何をしようとしてもここでは失敗します。私の状態はsecondFunction
正しく機能していると確信しています。最初のテスト(testFirstException
)は完全に機能し、2番目のテストのように失敗することはありません。
ここでPHPUnitテストを変更してはいけないことを付け加えたいと思います。
私はここで何が間違っているのですか?