Clojure - 集成测试组织

6
什么是在Clojure中构建集成和单元测试的典型方式?到目前为止,我有一个遵循我的src/目录结构的test/文件夹。但我想将它们分成单元测试和集成测试。是否有推荐的策略?在测试中使用注释?子文件夹test/unit和test/integration?环境变量?注意:如果有影响,我使用boot而不是leiningen。
1个回答

7
您可以自由组织内容。您可以为集成测试创建单独的目录树,将文件放在同一目录树中的不同位置,或者将单元测试和集成测试放在同一测试源文件中。
单元测试和集成测试唯一真正的区别在于:
1. 运行时间的长短 2. 与系统中其他部分的额外设置(这也意味着它们更慢和/或更难运行)。
因此,无论哪种方式,所有集成测试都应在每个函数上带有 "^:integration" 元数据标签。这个技巧对于“慢”单元测试也很有用。
可以像这个例子(使用 "clojure.test.check" 生成测试)一样标记“慢速”测试:
(tst/defspec ^:slow round-trip-bytes 9999
  (prop/for-all [orig gen/bytes]
    (let [string-b64  (b64/encode-bytes->str  orig)
          result      (b64/decode-str->bytes  string-b64) ]
      (assert (every? b64/base64-chars (seq string-b64)))
      (assert (types/byte-array? result))
      (= (seq orig) (seq result)))))

然后在你的 project.clj 文件中(不是 boot,我知道),指定以下内容:

:test-selectors { :default    (complement :slow)
                  :slow       :slow }

当你输入lein test时,标记为^:slow的测试将被跳过,而当你输入lein test :all时,所有测试(包括“slow”测试)都将运行。

请注意,关键字:slow并没有什么特别之处。您可以替换任何您想要的关键字,例如:integration

我没有经常使用boot,但我认为类似的技术也是可用的。


据我所知,目前在boot中还不存在这样的东西,但我很喜欢这个想法。 - nha

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