Erkennen, in welcher Methode sich die VM befindet

megalomaniac

Mitglied
Hallo zusammen,

folgender Hintergrund:

Ich habe einen Haufen an JUnit-Tests, in denen ich folgende Logmeldungen ausgebe:
Java:
logger.info("Starte Unit-Test " + this.getClass().getSimpleName() + ".testMethode():");

Da Copy-Paste bekanntlich der natürliche Feind der Korrektheit ist, gibt es einen ganzen Haufen an Testmethoden, in denen der Name der ausgegebenen Methode schlichtweg falsch ist.

Ich suche jetzt nach einer Möglichkeit den Namen der Methode, die gerade ausgeführt wird, dynamisch zu ermitteln. Eine Idee wäre ein Zugriff auf den Programm-Stack der VM, aber ich habe keine Ahnung wie das in Java möglich ist, bzw. ob überhaupt.

Hat hier jemand Erfahrung mit sochen Dingen? Vielleicht hat ja auch jemand einen alternativen Ansatz in petto?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Sollte so funktionieren:
Java:
StackTraceElement[] s = Thread.currentThread().getStackTrace();
String method = s[1].getMethodName();

EDIT: zu spät :rtfm:
 
S

SlaterB

Gast
aber nicht diese Zeilen in jede Methode schreiben,
einfach nur ein Aufruf
logBegin();

und diese Methode holt sich dann aus dem StackTrace nicht den eigenen Namen, der wäre ja immer logBegin ;) ,
sondern den des Aufrufers, das geht auch bestens, das ganze Array anschauen

die ganze Zeile
> logger.info("Starte Unit-Test "
usw. spart man sich auch noch, es bleibt der kürzestmögliche Methodenaufruf,

will man mal das Logger-Level umstellen oder englischen Text oder sonst etwas,
dann auch nur in dieser einen Methode ändern statt überall Arbeit,
Indirektion lohnt sich fast immer!

------


noch schöner wäre es auch ohne diesen Aufruf, aber nicht ganz so leicht, AOP mag da helfen,
oder in Java bisschen generischeres/ Reflection Verhalten,
z.B. nicht die Klasse an sich aufrufen sondern einen Proxy, der Aufrufe in Standard-Methoden mit Methodenname als Parameter umleitet

Explore the Dynamic Proxy API - JavaWorld
ziemlich kompliziert, nicht wegen 50x logBegin();, bei 500x logBegin(); schon eher ;)

-----

edit: wenn es immer dieselbe Methode ist, nur in unterschiedlichen Klassen,
da hilft Vererbung als noch einfacheres Konzept,
testMethode() in Oberklasse logt den Namen, ruft dann testMethodeIntern() auf, welches alle erbenden Klassen implementieren

Vererbung ist immer die erste Anlaufstelle, nur bei zig einzelnen Methoden schlecht dran,

edit2:
was ja doch auch wieder das Thema hier ist, erster Edit nicht ganz so dringend ;)
 
Zuletzt bearbeitet von einem Moderator:

AlexSpritze

Bekanntes Mitglied
Hat hier jemand Erfahrung mit sochen Dingen? Vielleicht hat ja auch jemand einen alternativen Ansatz in petto?

Wenn deine Testklassen von TestCase ableiten, dann gibt es da eine vererbte Methode
Code:
getName()
. Das heißt bei mir steht in der
Code:
setUp()
-Methode immer:
Java:
logger.info("Started {0}#{1}", getClass().getSimpleName(), getName());
(Und natürlich gibt er dann nicht setUp aus, sondern den Namen der aktuellen Test-Methode. Also die, die mit @Test annotiert ist.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
I Best Practice Kreise erkennen Allgemeine Java-Themen 1
N Erkennen eines Programs Allgemeine Java-Themen 2
P Strukturänderungen/abnormalien in Logfiles automatisch erkennen Allgemeine Java-Themen 5
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
T Java Windows sounds erkennen Allgemeine Java-Themen 1
M Backslash erkennen Allgemeine Java-Themen 4
D Flasche Eingabe erkennen Allgemeine Java-Themen 4
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Datei zugriffe erkennen Allgemeine Java-Themen 25
A Großbuchstaben erkennen (Prozente) Allgemeine Java-Themen 2
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
S Generellen MausKlick am PC erkennen Allgemeine Java-Themen 1
J Erkennen, ob Programm in JAR (neues Problem) Allgemeine Java-Themen 7
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
T Sechsecke, erkennen von bestimmten Werten Allgemeine Java-Themen 9
Hoppelmann "Variable" in String erkennen Allgemeine Java-Themen 2
D IP / Domain in einem String erkennen Allgemeine Java-Themen 2
J jexcelapi - Erkennen von Sheets Allgemeine Java-Themen 3
B Mausbewegung im Thread erkennen (hoch/runter) Allgemeine Java-Themen 6
K Quadrat in einem Bild erkennen Allgemeine Java-Themen 33
D Regex Raute erkennen Allgemeine Java-Themen 2
F Groovy Erkennen geometrischer Formen in einem Kantenbild Allgemeine Java-Themen 4
K Wiederholungen in Datensatz erkennen?! Allgemeine Java-Themen 6
S Wörter ohne Leerzeichen erkennen Allgemeine Java-Themen 5
M Festplatte am Namen erkennen Allgemeine Java-Themen 2
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
C Reguläre Ausrücke Punkte im Satz richtig erkennen Allgemeine Java-Themen 6
J Exe Datei in Java erkennen??? Allgemeine Java-Themen 4
P Netzlaufwerke erkennen Allgemeine Java-Themen 3
H File Attribut bzw Link erkennen Allgemeine Java-Themen 5
DamienX Debug Modus zur Laufzeit erkennen Allgemeine Java-Themen 3
data89 Barcodes in Bild erkennen Allgemeine Java-Themen 17
G Wechseldatenträger erkennen Allgemeine Java-Themen 5
T Shapes vergleichen? Zeichen erkennen? Allgemeine Java-Themen 7
Daniel_L RTF - Format aus Zwischenablage erkennen und "einlesen"? Allgemeine Java-Themen 5
B Zeilenumbruch erkennen Allgemeine Java-Themen 22
H Dateiende erkennen, wie? Allgemeine Java-Themen 7
S Dateiart erkennen Allgemeine Java-Themen 13
X Position eines Gegenstandes über Webcam erkennen Allgemeine Java-Themen 11
S unter UNIX - (symbolic) links erkennen? Allgemeine Java-Themen 12
D Datum korrekt erkennen Allgemeine Java-Themen 27
G Stringformen erkennen Allgemeine Java-Themen 8
N Endlosschleifen automatisiert erkennen (Code oder Laufzeit)? Allgemeine Java-Themen 6
G Größte zusammenhängende Fläche erkennen Allgemeine Java-Themen 3
K ersten programmstart erkennen Allgemeine Java-Themen 7
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
E Regexfrage (' erkennen) Allgemeine Java-Themen 4
C WindowStyle von Windows erkennen. Allgemeine Java-Themen 3
J Erkennen aus welchem Pfad das Jar gestartet wurde Allgemeine Java-Themen 6
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
MQue JButton erkennen Allgemeine Java-Themen 2
V Erkennen ob das Programm aus Jar File geladen wurde Allgemeine Java-Themen 9
T Einfachen Ton erkennen Allgemeine Java-Themen 7
R Hinzufügen von Dateien in einem Verzeichniss Auto. erkennen! Allgemeine Java-Themen 15
L objekte erkennen? Allgemeine Java-Themen 9
M Encoding automatisch erkennen Allgemeine Java-Themen 4
J Programmteile erkennen? Allgemeine Java-Themen 4
H Exception erkennen Allgemeine Java-Themen 10
S Farbe erkennen! Allgemeine Java-Themen 3
H existierende dateien erkennen Allgemeine Java-Themen 9
Natorion Erkennen ob das Programm mittels Jar-Datei oder class . Allgemeine Java-Themen 9
A Endlosschleifen automatisch erkennen Allgemeine Java-Themen 6
G String als Zahl erkennen Allgemeine Java-Themen 19
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
F Verschlüsseln, aber welcher Algo Allgemeine Java-Themen 29
L Entscheiden, welcher Code ausgeführt werden soll Allgemeine Java-Themen 7
O Thread beenden egal welcher Zustand? Allgemeine Java-Themen 8
S HTML => DOM - Welcher Parser für meine Zwecke? Allgemeine Java-Themen 3
J Drei Bedingungen -> 9 Fällen, welcher Ansatz besser Allgemeine Java-Themen 4
X Welcher Java Decompiler? JAD, JD-GUI?? Allgemeine Java-Themen 14
H2SO3- welcher writer kann fileencoding UND append? Allgemeine Java-Themen 2
G Reportgenerator: Welcher? Allgemeine Java-Themen 16
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
G java als dienst, welcher auf tastatureingaben reagiert Allgemeine Java-Themen 6
G Auslesen mit welcher Java-Version Anwendung kompiliert wurde Allgemeine Java-Themen 2
B Java Buch zu welcher Version empfehlenswert? Allgemeine Java-Themen 6
V Neues Objekt anlegen, welcher Typ? Allgemeine Java-Themen 2
E In welcher Datei wird classpath gesetzt? Allgemeine Java-Themen 9
F Welcher Datentyp in welchen casten? Allgemeine Java-Themen 11
F Welcher Name? paintsXY(), isPaintXY(), isPaintingXY() . Allgemeine Java-Themen 4
D Debugging? an welcher Stelle? Allgemeine Java-Themen 3
G Ab welcher Dateigrösse lohnt Kompression? Allgemeine Java-Themen 2
G 2 Mäuse angeschlossen, aber von welcher kam der Klick? Allgemeine Java-Themen 5
G Aus welcher Klasse wurde Methode aufgerufen Allgemeine Java-Themen 24
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben