Clojure - 集成测试组织

时间:2016-12-10 13:23:31

标签: testing clojure integration-testing

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

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

注意:我使用boot代替leiningen以防重要

1 个答案:

答案 0 :(得分:7)

组织由您决定。您可以为集成测试创建单独的目录树,在同一目录树中创建单独的文件,也可以在相同的测试源文件中进行单元测试和集成测试。

单位和单位之间唯一真正的区别集成测试

  1. 他们需要多长时间才能运行
  2. 与系统的其他部分进行额外设置(这也意味着它们运行速度较慢和/或更难)。
  3. 因此,无论哪种方式,所有集成测试都应在每个函数上标记^: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 test时,将跳过标有^:slow的测试,当您说lein test :all时,将运行所有测试(包括“慢”测试)。

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

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