2010-05-16 70 views
15

我发现了一些项目中的家务管理单元测试的约定,并且我不确定哪种方法适用于我们的下一个PHP项目。我是 试图找到最好的惯例,以鼓励简单的开发和 访问测试时审查源代码。我会很 对于每一个感兴趣的是你的经验/意见:对生产代码你把你的单元测试放在哪里?

  1. 一个文件夹,另一个用于单元测试:此分离项目的逻辑文件 单元测试。这种对 问题的分离与其优点一样令人讨厌:有人调查项目的源代码将会 - 因此我想 - 要么浏览 实现或单元测试(或者更常见的是:仅实现 )。单元测试的优点是对你的课程 的另一个观点已经失去 - 这两个观点与IMO相距太远。
  2. 注解测试方法:任何现代的单元测试框架,我知道让 开发人员创建专用的测试方法,来注解它们(@test)和 项目代码嵌入其中。我在这里看到的最大缺点是 项目文件混乱。即使这些方法使用的是评论报头(此线下面像单元测试)分离 它只是涨大 类不必要。同样的文件夹,执行文件中的
  3. 测试文件:我们的文件 命名约定决定了包含类(一个每个文件 类)PHP文件应该以.class.php结束。我可以想象,将单元 关于类文件的测试放入另一个以.test.php结尾的测试将 使测试更多地呈现给其他开发人员,而不会污染类别 。虽然涨大的项目文件夹,而不是 实现文件,这是我最喜欢的,到目前为止,但我有我的疑惑:我 会觉得其他人都拿出了这个已经,并丢弃由于某种原因,这个 选项(即我还没有看到一个Java项目相同文件夹中的文件 Foo.javaFooTest.java)也许是因为 Java开发人员做更多的使用的IDE,使他们能够 测试更容易获得的,而在PHP没有大的编辑器出现(像eclipse的 java) - 我知道很多开发人员使用vim/emacs或类似的编辑器,但本身对PHP开发本身并没有多少支持 。

什么是与这些单元测试的展示位置的你的经验?你有没有在这里列出的另一个约定 ?或者我是否仅仅评估了单元测试 ?

回答

3

我总是去#1。虽然他们靠得很近很好。我的理由如下:

  • 我觉得核心的代码库和unittests是有区别的。我需要一个真正的分离。
  • 最终用户很少需要查看单元测试。他们只对API感兴趣。尽管单元测试提供了对代码的单独看法,但实际上我觉得它不会被用来更好地理解它。 (更多描述性文档+示例)。
  • 因为最终用户很少需要unittests,所以我不想将它们与更多的文件和/或方法混淆。
  • 我的编码标准对于单元测试来说并不像核心库那样严格。这可能只是我的看法,但我并不在乎测试中的编码标准。

希望这会有所帮助。

13

我赞成将单元测试保存在与生产代码(#3)相同的目录中的独立源文件中。

单元测试不是二等公民,他们的代码必须像生产代码一样进行维护和重构。如果您将单元测试保存在单独的目录中,则下一个更改生产代码的开发人员可能会错过有单元测试并且无法维护测试的情况。

在C++中,我倾向于每班三个文件:

MyClass.h 
MyClass.cpp 
t_MyClass.cpp 

如果你使用的Vim,然后我toggle_unit_tests插件的源和单元测试文件之间切换可能非常有用。

6

当前的最佳做法是将单元测试分为自己的目录#1。所有的“约定配置”系统都是这样做的,例如。 Maven,Rails等

我认为你的选择是有趣和有效的,并且工具支持当然有支持它们。但它不是那么受欢迎(据我所知)。有些人反对让测试穿插生产代码。但是对我来说,如果你总是编写单元测试,那么它们就与你的代码一致。这似乎更简单。