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

时间:2016-12-21 12:24:43

标签: php unit-testing phpunit

有两种方法可以在Phpunit中声明异常:

  • 使用注释@expectedException
  • 使用方法调用$this->expectException()

我已经尝试了两种方法,它们的工作正常且完全相同。

哪种方法正确? 是否有关于应该使用哪一个的指导原则?

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

2 个答案:

答案 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