ich habe folgendes Problem:
gibt es eine Moeglichkeit bestimmte Klassen zu ermitteln, z.B. die, die mit *Test.java enden ? Das soll aber vollautomatisch gehen, d.h. wenn ich eine neue *Test.java - Klasse schreibe, muss ich diesen Klassennamen nirgends ergaenzen, da automatisch alle Testklassen erkannt werden. Ich glaube mit Reflexion ist das nicht moeglich, oder ?
gibt es eine Moeglichkeit bestimmte Klassen zu ermitteln, z.B.
die, die mit *Test.java enden ? Das soll aber vollautomatisch
gehen, d.h. wenn ich eine neue *Test.java - Klasse schreibe,
muss ich diesen Klassennamen nirgends ergaenzen, da
automatisch alle Testklassen erkannt werden.
danke fuer die schnelle Antwort. Das Problem ist folgendes:
Ich soll Tests automatisieren. D.h. ich erstelle eine zentrale Testklasse, die mir alle Klassen a la *Test.java auf bestimmte Methoden untersucht. Bisher musste ich in die zentrale Testklasse jedesmal die Klasse *Test mit der entsprechenden Methode angeben. Das macht irgendwie keinen Spass. Deswegen soll mir die zentrale Testklasse alle *Test.java Klassen automatisch ermitteln, so dass ich die Methoden auch automatisch aufrufen kann. Dann brauche ich nie mehr was in die zentrale Testklasse zu schreiben.
Ich soll Tests automatisieren. D.h. ich erstelle eine zentrale
Testklasse, die mir alle Klassen a la *Test.java auf bestimmte
Methoden untersucht. Bisher musste ich in die zentrale
Testklasse jedesmal die Klasse *Test mit der entsprechenden
Methode angeben. Das macht irgendwie keinen Spass. Deswegen
soll mir die zentrale Testklasse alle *Test.java Klassen
automatisch ermitteln, so dass ich die Methoden auch
automatisch aufrufen kann. Dann brauche ich nie mehr was in
die zentrale Testklasse zu schreiben.
Wenn ich Dich richtig verstanden habe, brauchst Du einen Iterator über sämtliche Klassen, um daraus die Klassen rauszusuchen, die auf ‚Test‘ enden (nicht etwa auf ‚*Test.java‘. Ich weiß nicht, ob es sowas gibt (ich glaub’s eigentlich nicht), aber vielleicht kannst Du einen Workaround mit einer Textdatei und Class.forName() benutzen. Dann mußt Du zumindestens die Testklasse nicht neu kompilieren.
Ich soll Tests automatisieren. D.h. ich erstelle eine zentrale
Testklasse, die mir alle Klassen a la *Test.java auf bestimmte
Methoden untersucht. Bisher musste ich in die zentrale
Testklasse jedesmal die Klasse *Test mit der entsprechenden
Methode angeben.
Das größere Problem wird sein an den Namen der Klasse bzw. der Methode zu kommen, da es AFAIK keine Möglichkeit in Java gibt alle verfügbaren Klassen zu ermitteln. IMHO wäre da die beste Lösung das über eine Datei, Parameter o. ä. zu parametrisieren. Falls du das nicht willst kannst du natürlich noch einfach die Platte bzw. den CLASSPATH nach .class Files die deinem Muster entsprechen durchsuchen.
Wenn du den Namen der Klasse und Methode kennst kannst du mit Class.forName() ein Class-Objekt für diese Klasse holen, von dem du wiederum über die Methode getDeclaredMethod() ein Method-Objekt und ein Array das die Parameter beschreibt kriegst. Damit kannst du dann die Methode aufrufen. Für Details schau am besten in die API-Doku oder frag nochmal nach.