Learn how to use Cloverage and coverage reports honestly in Clojure projects, including what coverage can and cannot tell you and how to use thresholds without turning them into theater.
Code coverage: A measurement of which parts of the code were executed during a test run. It shows reach, not correctness.
Cloverage can be useful in Clojure projects, but only if the team treats coverage as a diagnostic signal rather than a moral score. A high number can still hide weak assertions. A lower number can still be acceptable if the unexecuted code is low-risk or hard to test honestly.
Coverage is good for questions like:
Coverage is bad for questions like:
That distinction is the whole game. Treat coverage as evidence about reach, not proof about quality.
Cloverage is useful when you want:
In legacy Leiningen-based projects, the plugin path is still straightforward. In newer CLI-first projects, teams often wrap coverage collection in a dedicated script, alias, or build task so it fits their existing workflow. The exact command matters less than keeping the workflow repeatable.
A useful coverage review asks:
If a business-critical rules namespace is barely covered, that is important. If an infrequently used thin adapter is lower, the response may be different.
Coverage thresholds can help, but only if they are used carefully.
Reasonable uses:
Bad uses:
A threshold should guide attention, not replace judgment.
The best teams review coverage by risk category:
This keeps energy focused on the code where untested behavior is most dangerous.
Coverage work goes bad when teams:
Good coverage practice creates better questions. Bad coverage practice creates vanity metrics.
Use Cloverage to see where tests reach and where they do not. Then decide what matters by risk, not by raw percentage. Coverage is useful as a guide for investigation, but it is never the same thing as correctness.