cursive
cursive copied to clipboard
Custom clojure.test report types not handled
When running tests via cursive test runner, if clojure.test/do-report
is called with a report type unknown to cursive any method set up to handle that report type via clojure.test/report
multimethod is not called.
(ns cursive-custom-report-test
(:require
[clojure.test :refer :all]))
(defmethod clojure.test/assert-expr 'roughly [msg form]
`(let [op1# ~(nth form 1)
op2# ~(nth form 2)
tolerance# (if (= 4 ~(count form)) ~(last form) 2)
decimals# (/ 1. (Math/pow 10 tolerance#))
result# (< (Math/abs (- op1# op2#)) decimals#)]
(clojure.test/do-report
{:type (if result# :pass :custom-fail)
:message ~msg
:expected (format "%s should be roughly %s with %s tolerance"
op1# op2# decimals#)
:actual result#})
result#))
(defmethod clojure.test/report :custom-fail [m]
(clojure.test/inc-report-counter :fail)
(clojure.test/with-test-out (println "custom failure message")))
(clojure.test/deftest PI-test
(is (roughly 3.14 Math/PI 2))
(is (roughly 3.14 Math/PI 3)))
(defn -main [& _args]
(run-tests 'cursive-custom-report-test))
In the above exmple, running PI-test
via IDE will pass when it should fail. Running the main function via IDE will fail properly.