这个问题不是关于特定的库(尽管其中一些将用于最终),但更多关于如何构建应用程序代码以使副作用函数单元测试成为可能。如果我们应该这样做呢?如何在Clojure中对副作用函数进行单元测试?
显然,测试纯副作用自由函数,通过输入和声明输出是明确和简单的。
有2种(非常粗略的)类型的测试,单元和集成。让我们关注单元测试。因此,如果您有从文件中读取或写入文件的功能(例如使用slurp
/spit
),或者使用数据库,环形应用程序或core.async通道,那么如何进行单元测试Clojure中有这样的事情吗?嘲笑是否涉及,如果是的话,他们应该如何定义?是否有binding
,with-{redefs, redefs-fn, local-vars}
参与?我应该定义defprotocol
以在单元测试期间实现(又称模拟)实现吗?
测试的价值之一(主要价值?)是强制应用程序代码更好的设计,所以也许在Clojure中的测试是特殊的,你必须以特定的方式构造应用程序代码在Clojure中进行副作用函数单元测试可能吗?
或者我完全错过了这一点? P.S.1:我很喜欢Clojure中/小型应用程序的工作和开发(当然还有一段路要走),尽管测试部分对我来说还不完全清楚。 P.2:另一个重大话题是在Clojure中进行集成测试,但它应该得到一个单独的SO问题。
介绍[midje](https://github.com/marick/Midje) – Davyzhu