PHPUnit使用注释断言异常与方法调用
有两种方法可以在Phpunit中断言异常:PHPUnit使用注释断言异常与方法调用,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,有两种方法可以在Phpunit中断言异常: 使用注释@expectedException 使用方法调用$this->expectException() 我试过这两种方法,效果都很好,完全一样 哪种方法正确? 是否有关于使用哪一种的指导方针 PS:当异常基于某些条件,并且不总是发生时,显然应该使用该方法 对于我来说,选择使用方法而不是注释有几个明显的优势 在注释表单中,必须使用类名的完整名称空间才能使其工作: @expectedException MyException // Not foun
- 使用注释
@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)中,自动重构/重命名是一件轻而易举的事),编写的代码更少,并且符合3个阶段的标准测试方法设置,顺序正确,排列、断言、动作。最后,需要对注释进行内部解析,并且无论如何只调用expectException方法。因此它也会更有效。使用
expectException()
被认为是最佳实践,请参见此。两者都是正确的。根据您的偏好使用另一种方法,并以测试的可读性和易于理解为目标。