如何在项目中管理 PHPUnit 文件? 您是将它添加到 git 存储库还是忽略它们? 您是否在 PHPdocs 代码中使用 @assert 标记?
答案 0 :(得分:5)
我目前没有使用php,但我正在使用git中的python unit testing和sphinx documentation。我们将测试添加到git中,甚至对测试传递有一些要求,推送到远程devel
和master
分支(master
比devel
更难。这确保了一点代码质量(测试覆盖率也应该进行评估,但尚未实现:))。
我们在它们所属的目录中有test files in a separate directory next to the top-level source directory,前缀为test_
,以便单元测试框架自动找到它们。
对于类似的文档,我们只是将sphinx docs文件放入它们自己的子目录(docs)中,在我们的例子中是一个独立的git子模块,将来可能会更改。
我们希望能够跟踪测试中的变化,因为它们应该很少见。频繁的更改表明代码不成熟。
其他团队成员需要访问测试,否则他们没用。如果他们在某些地方更改了代码,他们必须能够验证它不会破坏任何内容。
文档属于代码。在python的情况下,代码直接包含文档。因此,我们必须将它们保持在一起,因为文档是从代码生成的。
在存储库中安装测试和文档可以在远程服务器上进行自动化测试和文档构建,从而为我们提供即时更新的文档和测试反馈。此外,基于测试结果的“代码质量”限制的实现以这种方式工作(它实际上更多地提醒人们运行测试,因为代码质量无法通过测试来检查而不查看测试覆盖率)。如果测试没有通过,则git服务器会拒绝引用。
我们要求在master
上,所有测试都必须通过或被跳过(遗憾的是,我们需要跳过,因为有些测试需要OpenGL,这在无头上是不可用的),而在{{1}上如果测试只是“表现得像预期的那样”(即通过,跳过或预期的失败,没有意外的成功,错误或失败),那就没关系。
答案 1 :(得分:2)
是的,将它们保存在git中。我通过查看项目获得的其他约定,包括phpunit本身。 (看一下doctrine2示例,它似乎遵循相同的约定。)
我将测试保存在顶级tests
目录中。在那之下我有意义地命名子目录,通常遵循主项目目录结构。我有一个functional
子目录,用于测试多个组件(如适用)。
我创建phpunit.xml.dist
告诉它在哪里找到测试(并立即告诉任何人查看我们使用phpunit的源代码,并通过查看xml文件,他们也可以理解约定)。
我不使用@assert
或骨架生成器。感觉就像一个玩具特征;你在一个地方(源文件)做一些打字,以便在另一个地方(你的单元测试文件)保存一些打字。但是,你将扩展单元测试文件中的测试(参见我的下一段),甚至可能删除一些原始断言,现在原始源文件中的@assert
条目已过时并具有误导性任何只看那个代码的人。
你也失去了很多力量,你最终需要对真实世界的类进行实际测试(简单的BankAccount例子,我在看你)。否setUp()
/ tearDown()
。没有实例变量。不支持所有其他内置断言功能,更不用说自定义功能了。没有@depends
和@dataProvider
。
针对@assert
以及维护单独的tests
目录树的另一个原因:我希望不同的人在可能的情况下编写测试和实际代码。当测试失败时,它有时会指出您的编码器或测试人员对原始项目规范的误解。当代码和测试紧密相连时,很有可能同时更改它们。特别是在星期五下午你有约会的时候。
答案 2 :(得分:1)
我们将测试存储在代码文件中,因此开发人员会看到要执行的测试,并确保他们根据需要更改测试。我们只需在文件中添加.test的扩展名。这样,我们可以简单地在每个测试文件中自动包含原始文件,然后可以使用模板创建。当我们发布代码时,构建过程会从所有目录中删除.test文件。
/ application / src /
Foo.php
Foo.php.test
/ application / src / CLASS /
FOO_BAR.class
FOO_BAR.class.test
require_once(substr(__FILE__, 0, -5)); // strip '.test' extension