How do I print each test name in clojure.test?

723 views
Skip to first unread message

Mayank Jain

unread,
Sep 1, 2015, 1:51:14 AM9/1/15
to Clojure
Hi,

I would like clojure.test to print name of each test as it runs. Currently it only prints on failure.
I would like it to print even when it passes.
Is there a way to do this? Maybe through writing some each fixture?

Currently I have written this function

(defn print-test
 
[]
 
(println (last (map #(:name (meta %)) *testing-vars*))))

And I add this print-test to each test at the top.

(deftest valid-test
 
(print-test)
 
(let []
   
....))


Is there a better way?

Thanks.

James Reeves

unread,
Sep 1, 2015, 3:21:09 AM9/1/15
to clo...@googlegroups.com
The clojure.test/report multimethod is what you're looking for. You can add a method for the :begin-test-var or :end-test-var types:

  (defmethod clojure.test/report :begin-test-var [m]
    (println (-> m :var meta :name)))

The report var itself is dynamic, so you can override it that way if you want to make things a little cleaner:

  (defmulti custom-report :type)

  (defmethod custom-report :default [m]
    (clojure.test/report m))

  (defmethod custom-report :begin-test-var [m]
    (println (-> m :var meta :name)))

  (binding [clojure.test/report custom-report]
    (clojure.test/run-all-tests))

- James

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Mayank Jain

unread,
Sep 1, 2015, 12:34:52 PM9/1/15
to Clojure
Hey thanks for the reply.

If I use only this, it works well.
 
  (defmethod clojure.test/report :begin-test-var [m]
    (println (-> m :var meta :name)))

But if I use the following code instead,
 
  (defmulti custom-report :type)

  (defmethod custom-report :default [m]
    (clojure.test/report m))

  (defmethod custom-report :begin-test-var [m]
    (println (-> m :var meta :name)))

  (binding [clojure.test/report custom-report]
    (clojure.test/run-all-tests))

It throws Stackoverflow error

StackOverflowError 
clojure.lang.Util.equiv (Util.java:33)
clojure.core/isa? (core.clj:5115)
clojure.lang.Var.invoke (Var.java:388)
clojure.lang.MultiFn.isA (MultiFn.java:123)
clojure.lang.MultiFn.findAndCacheBestMethod (MultiFn.java:177)
clojure.lang.MultiFn.getMethod (MultiFn.java:150)
clojure.lang.MultiFn.getFn (MultiFn.java:158)
clojure.lang.MultiFn.invoke (MultiFn.java:227)
 
Any idea why this could be happening?

Fluid Dynamics

unread,
Sep 1, 2015, 4:21:27 PM9/1/15
to Clojure
On Tuesday, September 1, 2015 at 12:34:52 PM UTC-4, Mayank Jain wrote:
  (defmethod custom-report :default [m]
    (clojure.test/report m))

  (binding [clojure.test/report custom-report]
    (clojure.test/run-all-tests))

Uh-oh.

James Reeves

unread,
Sep 1, 2015, 5:07:02 PM9/1/15
to clo...@googlegroups.com
On 1 September 2015 at 17:34, Mayank Jain <fires...@gmail.com> wrote:
It throws Stackoverflow error

StackOverflowError 
clojure.lang.Util.equiv (Util.java:33)
clojure.core/isa? (core.clj:5115)
clojure.lang.Var.invoke (Var.java:388)
clojure.lang.MultiFn.isA (MultiFn.java:123)
clojure.lang.MultiFn.findAndCacheBestMethod (MultiFn.java:177)
clojure.lang.MultiFn.getMethod (MultiFn.java:150)
clojure.lang.MultiFn.getFn (MultiFn.java:158)
clojure.lang.MultiFn.invoke (MultiFn.java:227)
 
Any idea why this could be happening?

My mistake, sorry. We need to assign another var to hold the version that hasn't been overridden:

  (def old-report clojure.test/report)

  (defmethod custom-report :default [m]
    (old-report m))

That should now work.

- James

Mayank Jain

unread,
Sep 3, 2015, 2:01:06 AM9/3/15
to Clojure
Thank you so much, that worked! :)

--
Reply all
Reply to author
Forward
0 new messages