2016-12-10 127 views
5

在Clojure中构建集成和单元测试的典型方法是什么? 到目前为止,我有一个test/文件夹,它遵循我的src/目录的结构。但我想将它们分解为单元测试和集成测试。Clojure - 集成测试组织

有没有推荐的策略?测试中的注释?子文件夹test/unittest/integration?环境变量?

注:我的情况下,使用boot而不是leiningen它的事项

回答

6

该组织是由你。您可以为集成测试创建单独的目录树,将单独的文件放在同一目录树中,或者在同一个测试源文件中进行单元测试和集成测试。

单元&集成测试之间的唯一真正的区别是

  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(无法开机,我知道),规定:

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

然后当您说lein run时,标记为^:slow的测试将被跳过,并且当您说lein run :all时,将运行所有测试(包括“慢”测试)。

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

我还没有使用boot很多,但我认为有类似的技术可用。

+0

据我所知,这不是在启动时存在的东西,但我喜欢这个想法。 – nha