你在哪里进行单元测试?

时间:2010-05-16 12:52:51

标签: unit-testing

我在项目中找到了几种常规单元测试约定 我不确定哪种方法适合我们的下一个PHP项目。我是 试图找到鼓励简单发展的最佳惯例 查看源代码时可以访问测试。我会的 对您的经验/意见感兴趣:

  1. 生产代码的一个文件夹,单元测试的另一个文件夹:这个分开 从项目的逻辑文件中进行单元测试。这种分离 关注同样是一种麻烦,因为它是一种优势:有人在研究 项目的源代码 - 所以我想 - 要么浏览 实施或单元测试(或更常见的:实施 只要)。单元测试的优势是您的课程的另一种观点 失去了 - 这两个观点离IMO太远了。
  2. 带注释的测试方法:我所知道的任何现代单元测试框架都允许 开发人员创建专用的测试方法,注释它们( @test )和 将它们嵌入项目代码中。我在这里看到的一大缺点是 项目文件变得杂乱无章。即使这些方法是分开的 使用评论标题(如 UNIT TESTS下面这行)它只是膨胀 不必要地上课。
  3. 在与实现文件相同的文件夹中测试文件:我们的文件 命名约定规定包含类的PHP文件(一个类 每个文件)应以 .class.php 结束。我可以想象放单位 将类文件测试到另一个以 .test.php 结尾的文件 使测试更多地呈现给其他开发人员而不会受到污染 班级。虽然它膨胀项目文件夹,而不是 实施文件,这是我最喜欢的,但我有疑虑:我 会认为其他人已经提出这个问题,并放弃了这一点 选项由于某种原因(即我没有看到带有文件的java项目 Foo.java FooTest.java 在同一个文件夹中。)也许是因为 Java开发人员更多地使用IDE,以便更容易访问 测试,而在PHP中没有出现大编辑(如eclipse for java) - 我知道很多开发人员使用vim / emacs或类似的编辑器 支持PHP开发本身。
  4. 您对这些单元测试展示位置的体验如何?你有没有 另一个我没有在这里列出的约定?或者我只是高估单元测试 审稿人的可访问性?

3 个答案:

答案 0 :(得分:14)

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

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

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

MyClass.h
MyClass.cpp
t_MyClass.cpp

如果你正在使用Vim,那么用于在源和单元测试文件之间切换的toggle_unit_tests插件可能会很有用。

答案 1 :(得分:7)

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

我认为您的替代方案很有趣且有效,而工具支持肯定会支持它们。但它并不那么流行(据我所知)。有些人反对在测试中穿插生产代码。但是对我来说,如果你总是编写单元测试,那么它就是你的代码所在。这似乎更简单。

答案 2 :(得分:3)

我总是选择#1。虽然它们很接近但很好。我的理由如下:

  • 我觉得核心代码库和单元测试之间存在差异。我需要真正的分离。
  • 最终用户很少需要查看单元测试。他们只对API感兴趣。虽然单元测试提供单独的代码视图很好,但在实践中我觉得它不会被用来更好地理解它。 (更多描述性文档+示例)。
  • 由于最终用户很少需要进行单元测试,因此我不想将它们与更多文件和/或方法混淆。
  • 我的编码标准对于单元测试而言并不像核心库那么严格。这可能只是我的意见,但我对测试中的编码标准并不在意。

希望这有帮助。