Clojure测试命名空间约定

18

我传统上在生产和测试代码中使用相同的文件夹结构,如下所示:

src/myproject/core.clj
test/myproject/core_test.clj

为了测试文件,我在文件名中添加了_test

最近我注意到有几个项目都遵循这种结构(这也是Leiningen默认生成的结构):

src/myproject/core.clj
test/myproject/test/core.clj

对此是否存在惯例或使用其中一种方式是否存在明显优势?


只要所有参与项目的人都遵循相同的约定,并且很容易找到给定生产命名空间的测试命名空间,我认为这是个人偏好的问题。这不是Java,包需要对齐以获得受保护/默认访问权限。 - Alex
1个回答

18

我认为这只是一种惯例——我认为没有任何技术上的优势。

出于完全非技术原因,我个人更喜欢第一种版本:

  • 在路径中有两个“test”目录似乎是多余的。
  • 将测试.clj文件与主要的.clj文件使用相同的名称可能会导致混淆
  • 有时您希望创建不完全与特定命名空间对齐的测试,例如端到端测试的 full_system_test.clj
  • 更容易匹配所有* _test.clj 文件的模式

还值得注意的是,在相当多的Clojure项目中也使用Maven标准目录布局约定(如果您构建包含Java源代码的多语言项目,则此举可能很方便):

src/main/clojure/myproject/core.clj
src/test/clojure/myproject/core_test.clj
src/main/resources/....
src/test/resources/....

4
对于任何中等复杂度的项目来说,+1 Maven布局很可能会派上用场。 - Alex
5
有时候会出现两个文件都叫做 core.clj 的情况,这可能会让人感到困惑或恼火,特别是当你需要查找堆栈跟踪时。 - BillRobertson42
1
Bill提出了一个非常好的观点。即使在生产代码中,我们也尝试像com.xyz.xyz-core这样命名事物——当你打开很多编辑器窗口时,这也会有所帮助。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接