Clojure - 集成测试组织
Clojure - integration test organization
在 Clojure 中构建集成和单元测试的典型方法是什么?
到目前为止,我有一个遵循 src/
目录结构的 test/
文件夹。但我想把它们分成单元测试和集成测试。
有推荐攻略吗?测试中的注释?子文件夹 test/unit
和 test/integration
?环境变量?
注意:我使用 boot
而不是 leiningen
以防万一
组织由你决定。您可以为集成测试创建单独的目录树,在同一目录树中有单独的文件,或者在相同的测试源文件中有单元测试和集成测试。
单元测试和集成测试之间唯一真正的区别是
- 他们需要多长时间 运行
- 与系统其他部分的额外设置(这也意味着它们更慢 and/or 更难 运行)。
因此,无论哪种方式,所有集成测试都应在每个函数上用 ^:integration
元数据进行标记。此技术对于 "slow" 单元测试也很有用。
一个 "slow" 测试可以像这样标记(使用 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" 的)将是 运行.
请注意关键字 :slow
没有什么特别之处。您可以替换任何您想要的关键字,例如 :integration
.
我没有经常使用 boot
,但我认为可以使用类似的技术。
在 Clojure 中构建集成和单元测试的典型方法是什么?
到目前为止,我有一个遵循 src/
目录结构的 test/
文件夹。但我想把它们分成单元测试和集成测试。
有推荐攻略吗?测试中的注释?子文件夹 test/unit
和 test/integration
?环境变量?
注意:我使用 boot
而不是 leiningen
以防万一
组织由你决定。您可以为集成测试创建单独的目录树,在同一目录树中有单独的文件,或者在相同的测试源文件中有单元测试和集成测试。
单元测试和集成测试之间唯一真正的区别是
- 他们需要多长时间 运行
- 与系统其他部分的额外设置(这也意味着它们更慢 and/or 更难 运行)。
因此,无论哪种方式,所有集成测试都应在每个函数上用 ^:integration
元数据进行标记。此技术对于 "slow" 单元测试也很有用。
一个 "slow" 测试可以像这样标记(使用 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" 的)将是 运行.
请注意关键字 :slow
没有什么特别之处。您可以替换任何您想要的关键字,例如 :integration
.
我没有经常使用 boot
,但我认为可以使用类似的技术。