我在 PHP 中有几个自定义异常:
class MainException extends Exception {};
class ExceptionOne extends MainException {};
class ExceptionTwo extends MainException {};
我在课堂上以两种简单的方法使用它们:
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
) 完美运行,我从来没有像第二个测试那样失败。
我想补充一点,我不应该在这里更改 PHPUnit 测试!
我在这里做错了什么?