你在哪里进行单元测试?

sou*_*rge 22 unit-testing

我在项目中找到了几种常规单元测试约定,我不确定哪种方法适合我们的下一个PHP项目.我正在尝试找到最佳约定,以便在查看源代码时鼓励简单的开发和测试的可访问性.我对您对每个方面的经验/意见非常感兴趣:

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

您对这些单元测试展示位置的体验如何?你有另一个我没有在这里列出的约定吗?或者我只是将单元测试可访问性高估给审阅者?

Joh*_*web 16

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

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

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

MyClass.h
MyClass.cpp
t_MyClass.cpp
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Vim,那么我的toggle_unit_tests插件可以在源代码和单元测试文件之间切换,这可能会很有用.

  • @Crt:我所参与的任何工程团队都没有证明责备是有用的方面。我宁愿让未来的开发人员通过明确关注点来为成功做好准备,这样他们就可以花时间满足业务需求。 (3认同)

ndp*_*ndp 7

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

我认为你的选择是有趣和有效的,工具支持当然可以支持它们.但它并不那么流行(据我所知).有些人反对在测试中穿插生产代码.但是对我来说,如果你总是编写单元测试,那么它就是你的代码所在.这似乎更简单.


Eve*_*ert 3

我总是选择第一。虽然很高兴他们靠得很近。我的理由如下:

  • 我觉得核心代码库和单元测试之间存在差异。我需要一次真正的分离。
  • 最终用户很少需要查看单元测试。他们只对 API 感兴趣。虽然单元测试提供了代码的单独视图,这很好,但实际上我觉得它不会用于更好地理解代码。(更多描述性文档+示例)。
  • 因为最终用户很少需要单元测试,所以我不想将它们与更多文件和/或方法混淆。
  • 我对单元测试的编码标准没有对核心库的一半严格。这可能只是我的观点,但我不太关心测试中的编码标准。

希望这可以帮助。

  • 我不同意“最终用户很少需要查看单元测试”。为了理解新的代码库,我要做的第一件事是查看单元测试如何使用代码、类和函数。 (3认同)