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

3

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

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

我已经尝试了它们两个,它们都可以正常工作并且完全相同。

哪种是正确的方式?是否有什么指导方针应该使用哪一种?

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


1
两种方法都是正确的。根据您的喜好和测试的易读性,选择其中一种即可。 - axiac
2个回答

5

使用 expectException() 被认为是最佳实践,参见这篇文章


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,自动重构/重命名都很容易),需要编写的代码更少,并符合正确顺序的三个测试阶段的标准测试方法设置(安排,断言,行动)。最后,内部注释需要被解析,而且只会调用expectException方法。因此,这种写法也更加高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接