Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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
Php 如何管理项目中的单元测试文件?您是否将它们添加到git中?_Php_Git_Unit Testing_Phpunit - Fatal编程技术网

Php 如何管理项目中的单元测试文件?您是否将它们添加到git中?

Php 如何管理项目中的单元测试文件?您是否将它们添加到git中?,php,git,unit-testing,phpunit,Php,Git,Unit Testing,Phpunit,您如何管理项目中的PHPUnit文件? 您是将其添加到您的git存储库中还是忽略它们? 您是否在PHPdocs代码中使用@assert标记?设置 我目前没有使用php,但我正在使用git。我们将测试添加到git中,甚至对推送到远程devel和master分支的测试通过有一定的要求(master比devel更难)。这保证了一点代码质量(测试覆盖率也应该被评估,但还没有实现:) 我们在它们所属的目录中有,前缀为test\uuu,以便单元测试框架自动找到它们 对于类似的文档,我们只是将sphinx文档

您如何管理项目中的PHPUnit文件?
您是将其添加到您的git存储库中还是忽略它们?
您是否在PHPdocs代码中使用@assert标记?

设置 我目前没有使用php,但我正在使用git。我们将测试添加到git中,甚至对推送到远程
devel
master
分支的测试通过有一定的要求(
master
devel
更难)。这保证了一点代码质量(测试覆盖率也应该被评估,但还没有实现:)

我们在它们所属的目录中有,前缀为
test\uuu
,以便单元测试框架自动找到它们

对于类似的文档,我们只是将sphinx文档文件放在它们自己的子目录(docs)中,在我们的例子中,这是一个独立的git子模块,将来可能会更改

根本原因
  • 我们希望能够跟踪测试中的变化,因为它们应该很少。频繁的更改表明代码不成熟

  • 其他团队成员需要访问这些测试,否则它们就没用了。如果他们在某些地方更改代码,他们必须能够验证代码没有破坏任何东西

  • 文档属于代码。对于python,代码直接包含文档。因此,我们必须将两者结合在一起,因为文档是从代码生成的

  • 将测试和文档保存在存储库中,可以在远程服务器上进行自动化测试和文档构建,从而为我们提供即时更新的文档和测试反馈。此外,基于测试结果的“代码质量”限制的实现也是如此(它实际上更像是提醒人们运行测试,因为如果不查看测试覆盖率,就无法通过测试检查代码质量)。如果测试未通过,则git服务器将拒绝引用

    例如,我们要求在
    master
    上,所有测试都必须通过或跳过(遗憾的是,我们需要跳过,因为有些测试需要OpenGL,而OpenGL在headless上不可用),而在
    devel
    上,如果测试只是“按预期进行”(即通过、跳过或预期失败,没有意外的成功、错误或失败),则可以


    • 是的,将它们保存在git中。我通过查看项目了解到的其他约定,包括phpunit本身。(查看doctrine2示例,它似乎遵循相同的约定。)

      我将测试保存在顶级
      tests
      目录中。在这种情况下,我有一些有意义的命名子目录,通常遵循主项目目录结构。我有一个
      functional
      子目录,用于同时测试多个组件的测试(如果适用)

      我创建了
      phpunit.xml.dist
      告诉它在哪里可以找到测试(并立即告诉任何查看源代码的人我们使用phpunit,通过查看xml文件,他们也可以理解该约定)

      我不使用
      @assert
      或骨架生成器。它感觉像一个玩具的特点;您可以在一个地方(源文件)进行一些键入,以在另一个地方(单元测试文件)保存一些键入。但是接下来您将扩展单元测试文件中的测试(参见我的下一段),甚至可能删除一些原始断言,而现在原始源文件中的
      @assert
      条目已经过时,并且会误导任何只查看该代码的人

      您还失去了很多对真实世界类进行真实世界测试所需的功能(我正在看一个简单的BankAccount示例)。无
      setUp()
      /
      tearDown()
      。没有实例变量。不支持所有其他内置assert函数,更不用说自定义函数了。没有
      @依赖于
      @数据提供者


      还有一个反对断言和维护单独的测试目录树的理由:我喜欢不同的人编写测试和实际的代码,如果可能的话。当测试失败时,它有时会指向原始项目规范中的误解,无论是您的程序员还是测试人员。当代码和测试紧密结合在一起时,很容易同时更改它们。尤其是周五下午晚些时候,当你有约会的时候。

      我们将测试与代码文件一起存储,这样开发人员就可以看到要执行的测试,并确保他们根据需要更改测试。我们只需将扩展名.test添加到文件中。这样,我们可以简单地将原始文件自动包含在每个测试文件中,然后使用模板创建这些文件。当我们发布代码时,构建过程会从所有目录中删除.test文件

      /应用程序/src/
      Foo.php
      Foo.php.test

      /应用程序/src/CLASS/
      FOO_BAR.class
      FOO_BAR.class.test


      require_一次(substr(u文件,0,-5));//strip.test扩展

      PS:好奇-如果您忽略并且不提交测试-其他团队成员(甚至您)应该如何与他们一起工作?+zerkms谢谢,相关要点很好:?谢谢,非常感谢helpful@Jonas,你的链接是broken@Pacerier非常感谢你,我更新了链接和答案,以反映当前的情况。添加.test扩展实际上使它更方便,这是一个很好的提示。您所说的“
      @assert
      和骨架生成器”是什么意思?@Pacerier它是/曾经是一个生成测试骨架的向导式模块。从phpunit 3.7:开始,它似乎已从core移动到可选模块,目前可在以下位置找到: