【问题标题】:Clojure test namespace conventionClojure 测试命名空间约定
【发布时间】:2012-09-20 11:49:23
【问题描述】:

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

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

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

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

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

是否有关于这一点的约定或使用一种优于另一种的明显优势?

【问题讨论】:

  • 只要从事该项目的每个人都遵循相同的约定,并且很容易找到给定生产 ns 的测试 ns,我会说这是个人喜好问题。这不是 Java,其中包需要排队以进行受保护/默认访问。

标签: clojure


【解决方案1】:

我相信这只是惯例 - 我认为这两种方式都没有任何技术优势。

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

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

另外值得注意的是,Maven standard directory layout convention 也用于不少 Clojure 项目(如果您构建还包含 Java 源代码的多语言项目,这会很方便):

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

【讨论】:

  • +1 到 Maven 布局。它可能会在任何中等复杂的项目中派上用场。
  • 另外,拥有两个名为 core.clj 的文件会让人感到困惑/烦人。尤其是在您挖掘堆栈跟踪时。
  • 比尔提出了一个很好的观点。即使在生产代码中,我们也会尝试将名称命名为 com.xyz.xyz-core - 当您打开大量编辑器窗口时,它也会有所帮助。
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2018-03-21
  • 2013-07-18
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多