Mockito-Maintainer tritt nach 10 Jahren von seinem Posten zurück
(github.com/mockito)- Ein zentraler Maintainer von Mockito hat angekündigt, seine rund 10-jährige Maintainer-Rolle bis März 2026 zu beenden und in den kommenden Monaten eine schrittweise Übergabe der Zuständigkeiten vorzunehmen
- Als einen direkten Auslöser der Entscheidung nannte er die Änderung der Agent-Richtlinie in JVM 22. Zwar könne er die sicherheitsbedingte Änderung nachvollziehen, doch die einseitige Forderung nach einer Umstellung ohne Alternative und die mangelnde Berücksichtigung auf Ökosystem-Ebene hätten eine große Belastung dargestellt
- Insbesondere erklärte er, dass Mockito zu den größten Nutzern von JVM-Agenten gehört, die Struktur jedoch dazu geführt habe, dass man die Problemlösung ohne Unterstützung durch Build-Tools oder kollaborative Diskussionen schultern musste, was Ressourcenverschleiß und eine Überlastung durch Verantwortung nach sich zog
- Als weiteren Faktor verwies er auf die strukturelle Komplexität der Kotlin-Unterstützung und erklärte, dass Kotlin-spezifische JVM-Verhaltensweisen und nicht dazu passende Funktionen innerhalb von Mockito zu mehr doppelten APIs und verzweigter Logik geführt hätten, was die Wartung erschwere
- Zuletzt teilte er mit, dass er in letzter Zeit bei der Arbeit an der Rust-basierten Web-Engine Servo mehr Freude und Motivation empfinde und angesichts begrenzter persönlicher Zeit zu dem Schluss gekommen sei, dass es schwierig sei, freiwillige Maintainer-Arbeit fortzusetzen, die sich wie eine Pflicht anfühlt
Der Meilenstein von 10 Jahren und die Entscheidung zur Übergabe
- Mit März 2026 erreicht er das 10-jährige Jubiläum als Mockito-Maintainer und betrachtet diesen Zeitpunkt als natürlichen Wendepunkt für eine Übergabe der Verantwortung
- In den kommenden Monaten will er sich als bisheriger Maintainer auf Wissensübergabe und die Stabilisierung des Übergangs konzentrieren
- Diskussionen über das künftige Maintainer-Modell und die langfristige Roadmap sollen in einem separaten GitHub-Issue geführt werden
Erschöpfung durch die Änderung der JVM-Agent-Richtlinie
- Hintergrund dafür, dass in Mockito 5 das Standard-Artefakt auf einen JVM-Agenten umgestellt wurde, ist die Richtlinienänderung, nach der das dynamische Anhängen von Agenten ab JVM 22 hinter einem Flag versteckt wurde
- Der sicherheitsbezogenen Stoßrichtung der Änderung stimmt er zu, kritisiert wird jedoch, dass die Entscheidung ohne alternatives Design oder Migrationsunterstützung faktisch vorgegeben wurde
- Obwohl Mockito häufig als führendes Praxisbeispiel für JVM-Funktionen genutzt wurde, habe bei dieser Änderung keine kollaborative Feedback-Schleife funktioniert
- Dass es für Agenten auf Ebene der Build-Tools weiterhin nur unzureichende Unterstützung gibt, wertet er als Zeichen dafür, dass die Priorität dieser Funktion niedrig ist
- Er betont, dass die Open-Source-Kollaborationsstruktur leicht zusammenbrechen kann, wenn freiwillige Maintainer übermäßig unter Druck gesetzt werden
Die strukturelle Last durch Kotlin-Unterstützung
- Die Verbreitung von Kotlin an sich bestreitet er nicht, doch aufgrund der Unterschiede in der internen Funktionsweise der JVM seien in
mockito-corezahlreiche Kotlin-spezifische Verarbeitungswege hinzugekommen - Bei Kotlin-Funktionen wie suspend-Funktionen gebe es Fälle, in denen sie nicht konsistent funktionieren, was zu mehr API-Duplizierung und Komplexität führe
- In der Folge sei die Codebasis spaghettiartig geworden und deutlich schwerer wartbar, und er erwähnte offen, dass ihm diese Arbeit persönlich keinen Spaß mache
- Eine stärker Kotlin-zentrierte Zukunft habe langfristig als Faktor gewirkt, der seine Motivation zur Mockito-Wartung schwächt
Wiedergewonnene Freude durch andere Open-Source-Aktivitäten
- Er hat zu zahlreichen Open-Source-Projekten beigetragen und empfindet in letzter Zeit durch die Arbeit an der Rust-basierten Web-Engine Servo wieder mehr Freude an der Entwicklung
- Bei der Auswahl begrenzter Abendstunden hätten andere Projekte als Mockito dauerhaft größere Zufriedenheit geboten
- Er kam zu dem Schluss, dass ein auf Freiwilligenarbeit basierender Maintainer-Job, der sich über längere Zeit wie eine Pflicht anfühlt, nicht wünschenswert ist
Der Gesamthintergrund der Entscheidung und die Botschaft
- Ernüchterung durch die JVM-Richtlinienänderung, die Grenzen der Struktur für Kotlin-Unterstützung und die wiedergewonnene Motivation in anderen Projekten wirkten als zentrale Faktoren der Entscheidung
- Er räumt ein, dass diese Faktoren nicht auf alle Beitragenden gleichermaßen zutreffen und dass andere die Kotlin-Unterstützung aktiver vorantreiben könnten
- Er entschied sich, die Rolle abzugeben, weil ein Wechsel im Maintainer-Team der langfristigen Gesundheit des Projekts eher zugutekommt
- Die Erfahrung als Open-Source-Maintainer selbst bezeichnete er als Ehre und Privileg und empfahl auch anderen, sich freiwillig zu engagieren
1 Kommentare
Hacker-News-Kommentare
Bei meinem zweiten Projekt bei Google habe ich Mocking komplett aufgegeben.
Beim Rewrite eines Systems mit GWT wurde Testabdeckung erzwungen, aber alle testeten nur ihren eigenen Service und injizierten Mocks per DI.
Das Ergebnis war ein extrem fragiles System, und ein gerade einmal 8 Wochen alter Service fühlte sich bereits wie Legacy-Code an. Schon wenn man nur die Backend-Reihenfolge oder die Zahl der Aufrufe änderte, musste man den ganzen Tag Mocks anpassen.
Auch die Guice-Modulstruktur war kompliziert, sodass man für die Injection von Mocks in der Testumgebung einen komplett anderen Injector bauen musste; am Ende liefen Tests und Produktion also in unterschiedlichen Umgebungen.
Außerdem wurden durch Debatten wie EasyMock vs. Mockito massenhaft Engineering-Ressourcen verschwendet.
Seitdem nutze ich fast nie mehr Mocks. Stattdessen halte ich es für viel besser, einfache Dummy-Services zu bauen, die ein Mindestmaß an realem Verhalten nachbilden.
Wenn ich Leute sehe, die auf Mocks fixiert sind, werde ich bis heute misstrauisch.
Ich habe Mockito in Kotlin 4 Jahre lang verwendet, und in 99 % der Fälle war es völlig brauchbar.
Komplexe oder verwirrende Situationen lagen meist an meiner unzureichenden Trennung von Zuständigkeiten.
Zu MockK gibt es kaum Unterschiede, eigentlich nur bei der Syntax. Wenn Mockito aber nicht mehr weiter gepflegt wird, sollte man wohl über einen Wechsel nachdenken.
Mocks sind am effektivsten, wenn eine Anwendung 4 bis 5 Schichten hat.
Ich selbst habe früher DI überstrapaziert und damit ein komplexes Netz aus Code gebaut, aber heute begrenze ich die Zahl der Schichten und halte die Struktur konsistent.
Für Tests einzelner Klassen verwende ich Mocks, für die Validierung von Anforderungen Integrationstests.
Am Ende ist nicht das Tool entscheidend, sondern die Disziplin des Entwicklers.
Mockito ist das populärste Mocking-Framework in Java.
Durch Plattformänderungen ist Mockito nun agent-basiert, weil dynamisches Laden von Agents ab JVM 22 nur noch hinter einem Flag möglich ist.
Solche Änderungen könnten die Einführung in Unternehmen verzögern.
Die Plattformänderung fühlte sich an, als würde der Mockito-Community übermäßig viel Verantwortung zugeschoben.
Vorwürfe nach dem Muster „Ihr blockiert das JVM-Ökosystem“ halte ich nicht für gesund.
Die Pflege von Open Source wirkt wirklich auszehrend.
Ich hätte das Projekt wohl einfach archiviert und mich zurückgezogen. Ich hoffe, Tim findet jetzt wenigstens Ruhe.
Ich möchte TimvdLippe meinen Dank aussprechen. Er hat großartige Vision und Hingabe gezeigt.
Mockito ist in Ordnung, wenn es von jemandem verwendet wird, der sich mit Tests wirklich auskennt.
In jeder Sprache und in jedem Framework sind schlechte Tests die Schuld derjenigen, die sie schreiben.
Ein „Agent“ ist ein Tool, das sich an die JVM anheftet und eine laufende Anwendung instrumentieren oder verändern kann.
Profiler, Debugger und Monitoring-Tools verwenden diesen Mechanismus.
Seit Java 21 ist er aus Sicherheitsgründen standardmäßig deaktiviert und nur noch mit dem Flag
-XX:+EnableDynamicAgentLoadingerlaubt.Details stehen im JEP-451-Dokument.