您尝试以这样一种方式来组合应用程序,即模拟很少需要,也就是说,您的函数大多数都是纯净的。
就您的案例而言,这意味着您会得到一个对象,代表失败,并使该函数(直接或间接)显示一条消息。
首先,最好是这样的函数:获取一个失败对象,返回一个效果(或分发一个事件)。
现在您不需要模拟任何东西,只需要运行一个测试,使用常规健康检查结果和一个失败结果,并检查结果。
还有一个神奇的宏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模拟库,但我发现我很少需要它们。