Tuesday, March 19, 2013

Clojure: Expectations Interaction Tests For Java Objects

I recently ran into some code that forced me to integrate with a Java library. While using the library I found myself wanting to do a bit of interaction testing, which I've historically done with Mockito. As a result, I added the ability to do interaction based tests on mock Java objects, directly in expectations.

Hopefully the code is what you'd expect.

(ns success.success-examples
(:use expectations erajure.core))
;; mock interaction based testing
(expect-let [r (mock Runnable)]
(interaction (.run r))
(.run r))
view raw exp_mocking.clj hosted with ❤ by GitHub

The previous example creates a mock Runnable in an expect-let, expects the run method to be run, and then calls the run method of the mock. This test is worthless in a real world context, but it's the simplest way to demonstrate the syntax for creating a mock & specifying the interaction.

The mock function defined in erajure, a minimal wrapper around mockito. All of the "times" arguments are the same as what's available for function interaction tests, examples can be found here.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.