有两种方法可以在Phpunit中声明异常:
@expectedException
$this->expectException()
我已经尝试了两种方法,它们的工作正常且完全相同。
哪种方法正确? 是否有关于应该使用哪一个的指导原则?
PS:当异常基于某些条件并且并非总是发生时,显然应该使用该方法。
答案 0 :(得分:4)
对于我选择使用方法而不是注释的原因,我有一些明显的优势。
在注释表单中,您必须使用完整的命名空间作为类名才能使用它:
@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等大多数编辑器中都是轻松的),编写的代码更少,并且符合正确的3个阶段的标准测试方法设置订单, 安排,断言,行动 。最后,内部的注释需要解析,并且只会调用expectException方法。所以它也会更有效率。
答案 1 :(得分:3)
使用expectException()
被视为最佳做法,请参阅此article。