我有一组测试,我想测试我的类在正确的时间抛出异常。在示例中,我的类使用__get()魔术方法,因此我需要测试在检索到无效属性时抛出异常:
function testExceptionThrownWhenGettingInvalidProperty() {
$obj = new MyClass();
$this->setExpectedException("Property qwerty does not exist");
$qwerty = $obj->qwerty;
}
该类会抛出错误,但不会只是获取传递,而是捕获异常!
There was 1 error:
1) QueryTest::testExceptionThrownWhenGettingInvalidProperty
Exception: Property qwerty does not exist
之前我使用的是SimpleTest,$this->expectException(new Exception("Property qwerty does not exist"));
工作正常。我知道还有其他方法(@expectedException和try-catch),但是这个方法应该可以工作,看起来更清晰。我有什么想法可以让它发挥作用吗?
答案 0 :(得分:13)
它没有在异常中查找文本,它正在寻找异常类的名称...... Docs
$this->setExpectedException('Exception');
当您使用SPL Exceptions或自定义异常类...
时,它非常方便答案 1 :(得分:13)
添加到ircmaxell的答案,实际上有一种更简单的方法:
/**
* @expectedException MyExceptionClass
* @expectedExceptionMessage Array too small
*/
public function testSomething()
{
}
@expectedException
期望的异常的类名,@expectedExceptionMessage
是期望的异常消息的子字符串(这是正确的,您不必拥有整个消息)。< / p>
如果您不想使用docblock注释,那么这两个注释实际上都可用作测试用例的方法。