Anpassung der Methoden- und Klassensichtbarkeit für JUnit 5

Anpassung der Methoden- und Klassensichtbarkeit für JUnit 5
Eine der schönsten Seiten der Programmierung ist das ständige Lernen, das nötig ist, um auf dem neuesten Stand zu bleiben. Ein Problem dabei ist, dass wir uns an bestimmte Nutzungsmuster gewöhnen, die die Einführung neuer Ansätze behindern können. Sensei unterstützt bei der Migration, indem es veraltete Muster identifiziert und uns direkt die zukünftig zu verwendende Lösung vorschlägt.
Als ich beispielsweise von JUnit 4 auf JUnit 5 umstieg, war ich es gewohnt, alle Testklassen und -methoden als public zu deklarieren. In JUnit 5 können diese jedoch package-private sein.
z. B. statt:
public class Junit5VisibilityTest {
@Test
public void thisDoesNotNeedToBePublic(){
Assertions.assertTrue(true);
}
}
Ich möchte eigentlich schreiben:
class Junit5VisibilityTest {
@Test
void thisDoesNotNeedToBePublic(){
Assertions.assertTrue(true);
}
}
Es hat eine Weile gedauert, bis ich die Routine dafür entwickelt hatte, und hin und wieder passiert mir immer noch ein Fehler.
Einsatz von Sensei
Mit Sensei kann ich Rezepte erstellen, die öffentliche Methoden und Klassen finden und die Deklarationen automatisch auf package-private umstellen.
Dazu habe ich folgendes Rezept erstellt:
Name - JUnit: JUnit 5 Testmethoden müssen nicht public sein
Beschreibung - JUnit 5 Testmethoden benötigen keine öffentliche Sichtbarkeit
Stufe - Fehler
Ich habe es als Fehler eingestuft, weil ich diese Programmierweise konsequent vermeiden möchte und eine deutlichere Kennzeichnung des Problems direkt in der IDE wünsche.
Anpassung der Klassendeklaration
Um die Klassen zu finden, suche ich nach allen Klassen, die eine untergeordnete Annotation @Test von JUnit 5 enthalten, d. h. org.junit.jupiter.api.Test
Und dort, wo die Klasse den Modifikator public besitzt:
suche:
klasse:
mit:
unterelement:
annotation:
typ: "org.junit.jupiter.api.Test"
modifikator: "public"
Anschließend entfernt der Quick-Fix den Modifikator, um die Sichtbarkeit auf den Standardwert zurückzusetzen – in diesem Fall paketprivat, genau das, was ich suche.
verfügbareKorrekturen:
- name: "public-Sichtbarkeit von JUnit 5-Testklasse entfernen"
aktionen:
- modifikatorenÄndern:
sichtbarkeit: ""
Anpassen der Methodendeklarationen
Das Rezept zur Anpassung der Methodendeklaration ähnelt stark dem für Klassen.
Zuerst suche ich nach öffentlichen Methoden, die mit @Test von JUnit 5 annotiert sind.
suche:
methode:
annotation:
typ: "org.junit.jupiter.api.Test"
modifikator: "public"
Danach ändere ich den Modifikator auf die Standardsichtbarkeit.
verfügbareKorrekturen:
- name: "public-Sichtbarkeit von @Test-Methode entfernen"
aktionen:
- modifikatorenÄndern:
sichtbarkeit: ""
Tipp: Mehrere Methoden gleichzeitig anpassen
Sensei bietet die Möglichkeit, den Quick-Fix auf alle Verstöße in der aktuellen Datei anzuwenden.
Wenn ich alt+enter verwende, um den Quick-Fix anzuwenden.
Wenn ich das Menü mit den Quick-Fix-Namen aufklappe, sehe ich eine Option für:
"Alle beheben: 'JUnit: JUnit 5-Testmethoden müssen nicht public sein'-Probleme in der Datei"
Wenn ich diese Option wähle, korrigiert Sensei alle Vorkommen des Problems, nicht nur das von mir ausgewählte.

Anpassen der Klasse
Genauso wie eine Methode nicht zwingend public sein muss, gilt dies auch für die Klasse.
Ich kann ein Rezept und einen Quick-Fix erstellen, um die Klasse anzupassen.
Name - JUnit: JUnit 5-Testklassen müssen nicht public sein
Beschreibung - JUnit 5-Testklassen müssen nicht public sein
Ebene - Fehler
Wenn ich eine Klasse finde, die public ist und eine Methode mit einer @Test-Annotation enthält, möchte ich die Sichtbarkeit ändern.
suche:
klasse:
modifikator: "public"
anyOf:
- unterelement:
methode:
annotation:
typ: "Test"
Ich kann die Änderung an der Klassendefinition erneut mit der Aktion changeModifiers vornehmen.
verfügbareKorrekturen:
- name: "@Test Klassen-Sichtbarkeit public entfernen"
aktionen:
- changeModifiers:
sichtbarkeit: ""
Zusammenfassung
Ein Tool zur statischen Analyse hat mich ursprünglich auf diesen empfohlenen Ansatz in JUnit aufmerksam gemacht. Doch das Tool half mir nicht dabei, die Routine zu entwickeln, meinen Code direkt während des Programmierens anzupassen.
Nutzen Sie den 'Level', um sich benachrichtigen zu lassen. Wenn ich mir eine bestimmte Codierweise abgewöhnen möchte, setze ich ihn zunächst auf 'Error' und stufe ihn dann schrittweise herab, während ich mich von diesem Ansatz entwöhne.
Denken Sie daran, dass Sie mit Sensei alle Probleme in der aktuellen Datei gleichzeitig beheben können, indem Sie beim Anwenden des QuickFix die Option im Dropdown-Menü verwenden.
Durch das Erstellen eines Sensei-Rezepts kann ich meinen alten Programmierstil in Echtzeit erkennen. Und ihn per QuickFix korrigieren, um den neuen Ansatz zu festigen, falls ich doch einmal in alte Muster zurückfalle.
---
Sie können Sensei direkt in IntelliJ installieren, indem Sie zu "Preferences \ Plugins" (Mac) oder "Settings \ Plugins" (Windows) navigieren und dort nach "sensei secure code" suchen.
Der Quellcode und die Rezepte hierfür finden sich im Repository `sensei-blog-examples` im GitHub-Account von Secure Code Warrior, innerhalb des Moduls `junitexamples`.
KI-gestützte Entwicklung kontrollieren, bevor sie in Produktion geht
Messen Sie KI-unterstützte Risiken, setzen Sie Richtlinien für sicheres Programmieren beim Commit durch und beschleunigen Sie die sichere Bereitstellung über Ihren gesamten SDLC hinweg.
Explore more blogs
Lorem ipsum diam quis enim lobortis scelerisque fermentum dui faucibus in ornare quam viverra orci sagittis eu volutpat odio facilisis.
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

Eine Sicherheitskultur: Wie Sage sein Champions-Programm aufgebaut hat
Erfahren Sie, wie Sage die Sicherheit durch einen flexiblen, beziehungsorientierten Ansatz gestärkt, über 200 Security Champions ausgebildet und eine messbare Risikoreduzierung erzielt hat.

Cybersecurity Awareness Month 2026: Das Verständnis von KI-Sicherheit ist entscheidend für die Unternehmensverteidigung
Wir haben einen Punkt erreicht, an dem die meisten führenden KI-Unternehmen öffentlich eine weltweite Verlangsamung der KI-Entwicklung gefordert haben, damit die Sicherheitsvorkehrungen Schritt halten können. Doch die Wahrheit ist: Ernsthafte Sicherheitsprobleme sind bereits Realität geworden. Dies bringt unzählige Sicherheitsverantwortliche und Führungsteams in eine dringliche Lage, da die finanziellen Kosten und Risiken durch die Implementierung von KI stetig steigen.

Enabler 8: Branding für Ihr Programm
Ein Programm für sicheres Programmieren braucht mehr als nur großartige Inhalte, um erfolgreich zu sein. Enabler 8 zeigt, wie Branding die Teilnahme zu einem begehrten, statusorientierten Erlebnis macht.
.avif)
Jeder Mitarbeiter steht jetzt an vorderster Front der KI-Cybersicherheit
Die Unternehmenslandschaft wandelt sich mit einer Geschwindigkeit, die kaum jemand vorhergesehen hat, bis es zu spät war. Wir haben offiziell die Schwelle von handgeschriebenem Code und einfacher Copilot-Unterstützung hin zur Ära des Agentic Development Lifecycle (ADLC) überschritten. Während autonome KI-Agenten eine beispiellose Effizienz in vielen Bereichen versprechen, bringen sie auch eine völlig neue Klasse von Sicherheits- und Regulierungsrisiken mit sich.
Secure AI-driven development before it ships
See developer risk, enforce policy, and prevent vulnerabilities across your software development lifecycle.