Skip to content
Clojure test coverage tool
Clojure HTML Other
#95 Compare This branch is 77 commits ahead of JacekLach:master.
Latest commit 38da3b0 Jul 22, 2015 @palfrey palfrey Merge pull request #78 from dlobue/codecov_support
Codecov support


Simple clojure coverage tool. Currently requires clojure 1.4.

Build Status


Add Clojars Project to :plugins in your .lein/profiles.clj

Testing frameworks support

This library currently only supports clojure.test. You can get midje to work by wrapping facts in deftest declarations.



Run lein cloverage in your project. See cloverage/coverage.clj for more options.

To specify the version of cloverage manually, set the CLOVERAGE_VERSION to desired value, for example CLOVERAGE_VERSION=1.0.4-SNAPSHOT lein cloverage

By default, the plugin will use the latest release version of cloverage.


There is no maven plugin right now. A workaround is to import this library in the project being tested, then run: mvn exec:java -Dexec.classpathScope=test -Dexec.mainClass='clojure.main' -Dexec.args='--main cloverage.coverage *args-to-coverage*'

Where args-to-coverage will usually be something like "-n 'ns.regex.' -t 'text.ns.regex.'"


IllegalArgumentException No matching field found: foo for class user.Bar  clojure.lang.Reflector.getInstanceField (

This is usually caused by protocols with methods starting with -. Before clojure 1.6:

user=> (defprotocol Foo (-foo [x] x))
user=> (deftype Bar [] Foo (-foo [_] "foo"))
user=> (-foo (Bar.))
user=> ((do -foo) (Bar.))

IllegalArgumentException No matching field found: foo for class user.Bar  clojure.lang.Reflector.getInstanceField (

Since cloverage will wrap the -foo symbol to track whether it's accessed, you will get this error. Upgrade to clojure 1.6.


In order to release to Clojars, you'll need to set CLOJARS_USERNAME and CLOJARS_PASSWORD in your environment variables.

e.g. CLOJARS_USERNAME=lshift CLOJARS_PASSWORD=<LShift Clojars password> lein release in each of the cloverage and lein-cloverage folders.



  • Features
    • Option to exclude namespaces (#57/#73)
    • Improved records fixes for Compojure (#66/#69)
    • Option to specify a path to src/test namespaces (#70)
    • Automatic push out of snapshot releases (#65)
    • Handle records correctly (#59)
    • Text summary of results (#50)
  • Bugfixes
    • Correct test namespaces regex usage (#67)
    • Cope with zero-namespace situations correctly (#62)



  • Features:
    • Minimal EMMA XML output format support.
    • Coveralls output format.
    • Cloverage now exits with non-zero exit code when your tests fail
    • Total % coverage summary in index.html
  • Bugfixes:
    • Better instrumentation logic is no longer confused by macro/symbol shadowing
    • Support for (:require [(namespace.prefix (suffix :as rename))]) ns forms
    • Cloverage jars no longer include all dependencies


  • fix empty list crash
  • add letfn support
  • print html report URL after testing


Distributed under the Eclipse Public License, the same as Clojure.


  • 2015 LShift, Tom Parker
  • 2012 LShift, Jacek Lach, Alexander Schmolck, Frank Shearar
  • 2010 Michael Delaurentis


Some code was taken from

  • Java IO interop (clojure-contrib/duck-streams) by Stuart Sierra (see cloverage/source.clj)
  • Topological sort ( by Alan Dipert (see cloverage/kahn.clj)
Something went wrong with that request. Please try again.