在Clojure中构建集成和单元测试的典型方法是什么?
到目前为止,我有一个test/
文件夹,它遵循我的src/
目录的结构。但我想将它们分成单元测试和集成测试。
是否有推荐的策略?测试中的注释?子文件夹test/unit
和test/integration
?环境变量?
注意:我使用boot
代替leiningen
以防重要
答案 0 :(得分:7)
组织由您决定。您可以为集成测试创建单独的目录树,在同一目录树中创建单独的文件,也可以在相同的测试源文件中进行单元测试和集成测试。
单位和单位之间唯一真正的区别集成测试
因此,无论哪种方式,所有集成测试都应在每个函数上标记^: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
,但我认为有类似的技术可用。