Renovate is a super useful open-source tool that automatically keeps your project’s dependencies up to date (see also STF milestone 1 ). It has broad support for a lot of ecosystems, including Maven and Gradle dependencies, Docker files, GitHub Actions, and many more. Every now and then, I need to configure a version in a file that it does not support out of the box. While a bit fiddly, there’s a…
A single required status check for GitHub Actions workflows. Since its introduction in 2018, GitHub Actions has become wildly popular 1 . I would attribute its success mostly to its tight integration into the platform and being free for open source projects. Whenever something needs checking, adding a new workflow is relatively easy. However, especially in large repositories, that might not always…
Thanks to the Sovereign Tech Fund (STF), I was able to work full-time on JUnit for about 16 months in 2024 and 2025. It’s time to reflect and assess whether that effort really did improve the long-term sustainability of the project. Moreover, I’ll share a look ahead at what’s next for me and for JUnit. Looking back The stated mission of the Sovereign Tech Agency , which manages the STF, is…
JUnit has long been publishing its User Guide and API documentation for every release on junit.org . However, there was no way to easily navigate between versions and no warnings when browsing outdated or preview releases. In this milestone , I finally had the chance to resolve these long-standing issues. Prior to this milestone, the only way of accessing a specific version was by manually…
Since its introduction in JUnit 5.3, parallel test execution has become a popular feature of the JUnit Platform. When enabled, it can significantly speed up test execution for many projects. However, there were still some rough edges and long-standing issues that needed to be addressed. Therefore, this milestone focused on improving the parallel test execution capabilities of JUnit. Vintage engine…
Prior to this milestone, the JUnit Platform provided no safe way to cancel test execution early, e.g. after the first test failed. The only option was to forcibly terminate the JVM running the tests. However, that also caused cleanup operations, such as deleting temporary files or stopping Docker containers used in tests, to be skipped. Letting all tests run is often wasteful in terms of resources…
Kotlin is a highly popular language for JVM applications (and beyond). Not only is it the default language for Android apps, it has also become increasingly popular for backend applications. JUnit Jupiter has always supported writing tests in Kotlin and provides Kotlin-specific assertions. However, there were some long-standing and highly-voted issues for improving the usability when writing tests…
This milestone was all about finally resolving issue #242 by introducing an error handling mechanism for test discovery. As you can tell by the low issue number (we’re currently at #4840) it has been a long time coming. Since introducing the discovery phase in an early version of JUnit 5, we had seen the need for being able to report “discovery issues” such as errors and warnings but also…
In version 5.0, JUnit Jupiter introduced support for parameterizing test methods. In JUnit 4, only test classes could be parameterized. Therefore, being able to do so on the method level provided more flexibility. However, there are cases where a set of tests should be executed against the same sets of arguments. The recent 5.13 release introduced support for @ParameterizedClass thereby finally…
A major goal of the Sovereign Tech Fund’s investment is to help projects become more sustainable and decrease their truck factor . For JUnit, one activity in desperate need of improvement in this area was performing a release. Prior to this milestone, all JUnit releases of the past years had been performed from my local computer. Artifacts were uploaded to Maven Central via Sonatype’s OSSRH…