PHPUnit 使用注解断言异常与方法调用

PHPUnit using annotations to assert exception vs method call

在 Phpunit 中有两种断言异常的方法:

两种我都试过了,效果很好,完全一样。

哪个是正确的方法? 是否有关于应使用哪一种的指南?

PS:当异常是基于某些条件并且并不总是发生时,显然应该使用该方法。

为什么我选择使用方法而不是注释对我来说有一些明显的优势。

在注释形式中,您必须使用完整的命名空间到 class 名称才能工作:

@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 

这更具可读性、更明确、更灵活(自动化 refactoring/renaming 在大多数编辑器如 PHPStorm 中是轻而易举的),编写的代码更少,并且符合标准的测试方法设置顺序正确的 3 个阶段,Arrange、Assert、Act。最后,注释在内部需要被解析,并且无论如何只会调用 expectException 方法。所以它也会更有效率。

使用 expectException() 被认为是最佳实践,请参阅此 article