有没有办法关闭';故障/错误时停止';对于PHPUnit中的特定测试?

有没有办法关闭';故障/错误时停止';对于PHPUnit中的特定测试?,php,phpunit,Php,Phpunit,我正在开发一个API文档系统,并希望动态检查每个命令是否附带文档。 最简单的方法是动态循环每个命令,并检查现有文档是否与之匹配 我的代码如下所示: public function testMissingDocs() { foreach ($aCommands as $sKey => $aOptions) { $this->assertNotNull($oDocs->get($sKey)); } } 问题在于PHPUnit的StopOnF

我正在开发一个API文档系统,并希望动态检查每个命令是否附带文档。 最简单的方法是动态循环每个命令,并检查现有文档是否与之匹配

我的代码如下所示:

public function testMissingDocs()
{
    foreach ($aCommands as $sKey => $aOptions)
    {
        $this->assertNotNull($oDocs->get($sKey));
    }
}
问题在于PHPUnit的StopOnFailure/Error特性,它在第一次断言失败后停止测试。我理解这个功能的原因,并且我希望在我的大多数测试用例中都使用它,但是对于动态断言/测试,它会让事情变得有点困难


是否有办法在每个测试的基础上禁用它,以便我可以检查此测试中的每个命令?

如果缺少特定类或方法的文档,则表示该类存在问题,而不是检索文档的方法存在问题

尽管将所有文档合并到一个测试中可能更容易,但这并没有遵循单元测试最佳实践(这就是为什么PHPUnit框架对您不利而不是对您有利)

我建议采取以下两种方法之一来纠正这一问题:

  • 重构测试,使每个类和/或方法都有自己的文档检查(有几种方法可以)
  • 使用一种工具,例如,因为缺少文档可能被视为一种惯例——而不是功能缺陷
  • 可以使用命令将单个测试拆分为尽可能多的测试

    /**
     * @dataProvider getDocsForAllCommands
     */
    public function testEveryCommandHasDocs($sKey)
    {
        $this->assertNotNull($oDocs->get($sKey));
    }
    
    public function getKeysForAllCommands()
    {
        return array_keys($aCommands);
    }
    

    我的目标是为开发人员忘记为API命令添加文档时构建一个自动警告系统。必须手动编写一个测试来检查文档,这就违背了这一点——这与花时间编写文档本身是一样的。PHP_CodeSniffer imho是您的工作@Valorin的首选工具。它会自动抱怨缺少文档块,而无需您自己编写。(Ab)使用PHPUnit也可以做到这一点,但这个建议绝对有效:)哦!我不是说代码中的文档,我是说用户文档-基本上我有一个.ini文件,每个命令都有文档,我有一个界面,可以根据命令和.ini文件中的文档自动生成HTML文档页面。因此,它通过检查每个API命令在docs.ini文件中是否有相应的文本块来确保生成的HTML用户文档是完整的。如果您的系统将自动生成文档,它还能生成单元测试吗?太棒了,这会很好地完成工作。谢谢。我从来都不知道这个很酷的功能