I’m creating a library that includes both Clojure and Java code, and would like to be able to run a single test JUnit suite across the entire code base. Seems that this should be possible since they are both running on the JVM and there is good Clojure/Java interop.
However, currently Clojure code seems to favour unit testing done through the clojure.test API using “(run-all-tests)” and friends.
Is there a good way to wrap these Clojure tests in some sort of wrapper so that they can be automatically called from JUnit?
(when I say automatically, I mean without resorting to the manual solution of writing a JUnit test case to wrap and call each Clojure test case individually 🙂 )
The easiest thing to do would be to call
run-all-testsfrom a single JUnit test. You could capture the output and look at the last line that indicates the pass/fail/error count. If you see a fail or an error you can make the JUnit test fail.However, if you want interaction with each Clojure test you’ll have to implement similar functionality to what’s found in clojure.test. That is, for each value in the each namespace look for a function stored in the
:testmeta-data value. That value is your test function.Lines 661-686 of test.clj give a good synopsis of how tests are stored and later run in Clojure.