您尝试以这种方式构建应用程序,使得模拟很少需要,即您的函数大多是纯函数。
在您的例子中,这意味着您有一个函数接受表示失败的节点,并允许该函数直接或间接显示消息。
理想情况下,该函数只做一件事:获取失败对象,返回效果(或分发事件).
现在您不需要进行模拟,只需用正常的健康检查结果和失败结果运行测试并检查结果。
还有神奇的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模拟库,但我发现我很少需要它们。