你试图以这样一种方式来构造你的应用程序,使得模拟很少需要,即大多数函数都是纯净的。
在你的情况下,意味着你将有一个获取表示失败的对象的函数,并且这个函数(直接或间接地)显示消息。
最好,该函数只做一件事:获取失败对象,返回效果(或调度事件)。
现在你不需要模拟任何东西,只需要运行一个测试,使用常规的健康检查结果和失败结果,并检查结果。
还有神奇的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模拟库,但我发现我很少需要它们。