Php 如何管理项目中的单元测试文件?您是否将它们添加到git中?
您如何管理项目中的PHPUnit文件?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文档
您是将其添加到您的git存储库中还是忽略它们?
您是否在PHPdocs代码中使用@assert标记?设置 我目前没有使用php,但我正在使用git。我们将测试添加到git中,甚至对推送到远程
devel
和master
分支的测试通过有一定的要求(master
比devel
更难)。这保证了一点代码质量(测试覆盖率也应该被评估,但还没有实现:)
我们在它们所属的目录中有,前缀为test\uuu
,以便单元测试框架自动找到它们
对于类似的文档,我们只是将sphinx文档文件放在它们自己的子目录(docs)中,在我们的例子中,这是一个独立的git子模块,将来可能会更改
根本原因
- 我们希望能够跟踪测试中的变化,因为它们应该很少。频繁的更改表明代码不成熟
- 其他团队成员需要访问这些测试,否则它们就没用了。如果他们在某些地方更改代码,他们必须能够验证代码没有破坏任何东西
- 文档属于代码。对于python,代码直接包含文档。因此,我们必须将两者结合在一起,因为文档是从代码生成的
- 将测试和文档保存在存储库中,可以在远程服务器上进行自动化测试和文档构建,从而为我们提供即时更新的文档和测试反馈。此外,基于测试结果的“代码质量”限制的实现也是如此(它实际上更像是提醒人们运行测试,因为如果不查看测试覆盖率,就无法通过测试检查代码质量)。如果测试未通过,则git服务器将拒绝引用
例如,我们要求在
上,所有测试都必须通过或跳过(遗憾的是,我们需要跳过,因为有些测试需要OpenGL,而OpenGL在headless上不可用),而在master
上,如果测试只是“按预期进行”(即通过、跳过或预期失败,没有意外的成功、错误或失败),则可以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移动到可选模块,目前可在以下位置找到: