Skip to content

Instantly share code, notes, and snippets.

@henryw374
Created March 18, 2026 14:49
Show Gist options
  • Select an option

  • Save henryw374/9ad2c453bf02dfc5194ebe9c4b5c43ac to your computer and use it in GitHub Desktop.

Select an option

Save henryw374/9ad2c453bf02dfc5194ebe9c4b5c43ac to your computer and use it in GitHub Desktop.
run junit from clojure
(ns junit
"could see as a modern replacement for lein-junit, which afaik does junit 4 at most.
find and run some junit tests from clojure.
deps required are junit-jupiter, junit-jupiter-engine, junit-platform-launcher and junit-platform-reporting
"
(:require [clojure.java.io :as io])
(:import (java.nio.file Paths)
(org.junit.platform.engine.discovery DiscoverySelectors)
(org.junit.platform.launcher LauncherDiscoveryRequest TestExecutionListener)
(org.junit.platform.launcher.core Launcher DiscoveryRequestBuilder LauncherFactory)
(org.junit.platform.launcher.listeners LoggingListener SummaryGeneratingListener)
.
(org.junit.platform.reporting.legacy.xml LegacyXmlReportGeneratingListener)))
(defn run-junit
"package arg is a string, which can be the first part of a package name.
so, 'com' would work, if you had packages starting 'com.widdindustries....'"
[package]
(let [discovery (-> (Launcher DiscoveryRequestBuilder/discoveryRequest)
(.selectors
[(DiscoverySelectors/selectPackage package)])
(.build))
launcher (-> (LauncherFactory/openSession)
(.getLauncher))]
(with-open [writer (PrintWriter-on (fn [s]) (fn []))]
(let [test-plan (.discover launcher discovery)]
(.execute launcher test-plan (into-array TestExecutionListener
(LegacyXmlReportGeneratingListener.
(Paths/get (.toURI (io/file "test-results")))
writer)))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment