Clojure测试命名空间约定

pon*_*zao 17 clojure

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

src/myproject/core.clj
test/myproject/core_test.clj
Run Code Online (Sandbox Code Playgroud)

对于我_test在文件名中添加的测试文件.

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

src/myproject/core.clj
test/myproject/test/core.clj
Run Code Online (Sandbox Code Playgroud)

是否存在关于使用一个或另一个明显优势的约定?

mik*_*era 17

我相信这只是惯例 - 我认为无论哪种方式都没有任何技术优势.

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

  • 在路径中有两个"测试"目录似乎是多余的.
  • 使测试.clj文件与主.clj文件具有相同的名称会引起混淆
  • 有时,您希望创建与特定名称空间不完全对齐的测试,例如,full_system_test.clj用于端到端测试
  • 在所有*_test.clj文件上进行模式匹配更容易

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

src/main/clojure/myproject/core.clj
src/test/clojure/myproject/core_test.clj
src/main/resources/....
src/test/resources/....
Run Code Online (Sandbox Code Playgroud)

  • 此外,它有两个名为core.clj的文件会让人感到困惑/烦恼.特别是在挖掘堆栈跟踪时. (5认同)
  • +1到Maven布局.任何中等复杂的项目都可能派上用场. (4认同)