Phpunit中有两种断言异常的方式:
- 使用注释
@expectedException
- 使用方法调用
$this->expectException()
我已经尝试了它们两个,它们都可以正常工作并且完全相同。
哪种是正确的方式?是否有什么指导方针应该使用哪一种?
PS:当异常基于某些条件而不总是发生时,显然应该使用方法。
Phpunit中有两种断言异常的方式:
@expectedException
$this->expectException()
我已经尝试了它们两个,它们都可以正常工作并且完全相同。
哪种是正确的方式?是否有什么指导方针应该使用哪一种?
PS:当异常基于某些条件而不总是发生时,显然应该使用方法。
相较于注解,我选择使用这种方法有几个明显的优势。
在注解形式中,你必须使用完整的命名空间来指定类名才能使其正常工作:
@expectedException MyException // Not found unless it is within the current namespace
@expectedException \Some\Deep\Namespace\MyException // works
另一种选择:
$this->expectException(MyException::class); // works, with a 'use' statement
这种写法更易读,更加明确,灵活性更高(在大多数编辑器中,如PHPStorm,自动重构/重命名都很容易),需要编写的代码更少,并符合正确顺序的三个测试阶段的标准测试方法设置(安排,断言,行动)。最后,内部注释需要被解析,而且只会调用expectException方法。因此,这种写法也更加高效。