PHPUnit没有捕获预期的异常

Nat*_*nes 6 php phpunit unit-testing exception

我有一组测试,我想测试我的类在正确的时间抛出异常.在示例中,我的类使用__get()魔术方法,因此我需要测试在检索到无效属性时抛出异常:

function testExceptionThrownWhenGettingInvalidProperty() {
  $obj = new MyClass();
  $this->setExpectedException("Property qwerty does not exist");
  $qwerty = $obj->qwerty;
}
Run Code Online (Sandbox Code Playgroud)

该类会抛出错误,但不是仅仅获取传递,而是捕获异常!

There was 1 error:

1) QueryTest::testExceptionThrownWhenGettingInvalidProperty
Exception: Property qwerty does not exist
Run Code Online (Sandbox Code Playgroud)

我之前使用过SimpleTest,$this->expectException(new Exception("Property qwerty does not exist"));工作得很好.我知道还有其他方法(@expectedException和try-catch),但是这个方法应该可以工作,看起来更清晰.我有什么想法可以使这项工作?

irc*_*ell 13

它不是在异常中查找文本,它正在查找异常类的名称... Docs

$this->setExpectedException('Exception');
Run Code Online (Sandbox Code Playgroud)

当您使用SPL Exceptions或自定义异常类时,它非常方便...


rye*_*guy 13

添加到ircmaxell的答案,实际上有一种更简单的方法:

/**
 * @expectedException MyExceptionClass
 * @expectedExceptionMessage Array too small
 */
public function testSomething()
{
}
Run Code Online (Sandbox Code Playgroud)

@expectedException异常的类名的期望,并且@expectedExceptionMessage是异常消息的一个子期待(这是正确的,你不必拥有整个消息).

如果您不想使用docblock注释,则这两个注释实际上都可用作测试用例的方法.

  • +1 ...我不知道`@ expectedExceptionMessage` docblock元素......每天都学到新东西...... (4认同)