您尝试以这种方式构建应用程序,即很少需要模拟,也就是说,您的大多数函数都是纯的。
在您的方案中,意味着您将有一个函数,它接收表示失败的对象,并且(直接或间接)显示消息。
最好,该函数只做一件事:获取一个错误对象,返回一个效果(或分派一个事件)。
现在您不需要模拟任何东西,只需使用健康检查的正常结果和一个错误结果运行测试,并检查结果。
还有神奇的with-redef
宏,它允许您临时重新绑定内容。
在这个例子中,已经重新定义了 http/post
(deftest is-a-macro
(with-redefs [http/post (fn [url] {:body "Goodbye world"})]
(is (= {:body "Goodbye world"} (http/post "http://service.com/greet")))))
这通常是您所需要的一切。
您当然可以使用各种Java模拟库,但我发现我很少需要它们。