You try to compose your application in a way where mocking is rarely required, i.e. most of your functions are pure.
In your case it means you'll have a function that gets an object that represents a failure and have that function (either directly or indirectly) display a message.
Preferably, the function just does one thing: gets a failure object, returns an effect (or dispatches an event).
Now you don't need to mock anything, just run a test with the regular health check result and a failure result and check the outcome.
There's also the wonderful with-redef
macro, that allows you to temporarily re-bind things.
In this example, http/post
has been re-defined:
(deftest is-a-macro
(with-redefs [http/post (fn [url] {:body "Goodbye world"})]
(is (= {:body "Goodbye world"} (http/post "http://service.com/greet")))))
That's usually all you need.
You can of course use various Java mockup libraries, but I find I rarely need them.