Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit使用注释断言异常与方法调用_Php_Unit Testing_Phpunit - Fatal编程技术网

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

PHPUnit使用注释断言异常与方法调用,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,有两种方法可以在Phpunit中断言异常: 使用注释@expectedException 使用方法调用$this->expectException() 我试过这两种方法,效果都很好,完全一样 哪种方法正确? 是否有关于使用哪一种的指导方针 PS:当异常基于某些条件,并且不总是发生时,显然应该使用该方法 对于我来说,选择使用方法而不是注释有几个明显的优势 在注释表单中,必须使用类名的完整名称空间才能使其工作: @expectedException MyException // Not foun

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

  • 使用注释
    @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()
被认为是最佳实践,请参见此。

两者都是正确的。根据您的偏好使用另一种方法,并以测试的可读性和易于理解为目标。