Method-Annotations in aufgerufener Methode auswerten

Novanic

Bekanntes Mitglied
Hi,

ich habe mal eine etwas speziellere Frage zu Annotations. Ich möchte Tests per Annotations konfigurieren, anstatt irgendwelche "old-style" Initialisierungsmethoden zu verwenden. Z.B. möchte ich dass jeder Test ein Datum angeben kann, das zur Ausführung das aktuelle Datum simuliert.

Im Moment sieht mein Test z.B. so aus. Die render-Methode liegt in der abstrakten Test-Oberklasse und führt die zu testende Logik aus. Die setUp-Methode liegt auch in der Oberklasse und setzt vorher das zu verwendende Datum.
Java:
public void testRender() {
        super.setUp("2010-06-05");
        
        String theResult = super.render("XY");
        assertEquals("05.06.2010 - XY");
    }

Nett wäre z.B. so etwas:
Java:
@CurrentTestDate(date = "2010-06-05")
public void testRender() {
        String theResult = super.render("XY");
        assertEquals("05.06.2010 - XY");
    }
Die render-Methode müsste die Annotation auswerten bevor die zu testende Logik ausgeführt wird. Die Schwierigkeit hierbei ist, dass der Methodenname nicht bekannt ist, weil die Logik in der Oberklasse liegt. Man könnte natürlich über den Stacktrace gehen, aber so schön und sicher ist das wahrscheinlich nicht. Hat jemand eine bessere Idee?

Danke schonmal.

Gruß Sven
 

Wildcard

Top Contributor
Das ist doch sogar noch mehr Schreibarbeit als ein einfaches setTestDate("2010-06-05")...
Über den Stack zu gehen währe die einzige Möglichkeit wenn der Aufrufer sich nicht selbst mitgibt und das ist ein ziemlicher Hack.
Ich sehe zwar nicht wirklich was du dir davon erhoffst, aber theoretisch könntest du wohl mit Dependency Injection arbeiten um solche Properties zu initialisieren, da deine Tests ja von der Klasse erben die die Initialisierung vornehmen.
 
J

javaRocks

Gast
Man möge mich verbessern, wenn ich falsch liege. Aber ginge nicht folgendes?

Java:
public String render(String xyz)
	{
		String testDatum = null;
		for(Method m : this.getClass().getDeclaredMethods())
		{
			if(m.isAnnotationPresent(CurrentTestDate.class))
			{
				CurrentTestDate meinTestDatum = m.getAnnotation(CurrentTestDate.class);
				testDatum = meinTestDatum.date();
				break;
			}
		}
		
		/*
		 * Was auch immer für Logik ausgeführt wird...
		 */
		
		return "Ergebnis: " + testDatum;
	}

Oder verstehe ich jetzt alles ganz falsch? Ich bitte um Überprüfung :D

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mrStudent The method append is not applicable for the arguments (Queue<Integer>, Queue<Integer>) Allgemeine Java-Themen 4
J Final Method Allgemeine Java-Themen 9
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
J Reflection-Method Hook? Allgemeine Java-Themen 14
B Exception in Application init method Allgemeine Java-Themen 5
M Lambda "invalid method reference no suitable method found" Allgemeine Java-Themen 2
Thallius JSONArray - the method length() is undefined for JSONArray Allgemeine Java-Themen 4
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
C Method Area, Stack, Heap Allgemeine Java-Themen 7
R Stop a method??? Allgemeine Java-Themen 34
R Merkwürdiges Verhalten der equals Method Allgemeine Java-Themen 4
D Invalid Method declaration Allgemeine Java-Themen 5
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
G JavaDoc: Spezielle Beschreibung nur in Method Detail Allgemeine Java-Themen 5
faetzminator IllegalArgumentException bei Method.invoke() Allgemeine Java-Themen 6
R Fehler:method does not override a method from its superclass Allgemeine Java-Themen 3
G javax.jms.IllegalStateException: This method. Allgemeine Java-Themen 4
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
R The mark method of InputStream does nothing. Allgemeine Java-Themen 4
J httpclient: Post-method aber trotzdem "URI to long&quot Allgemeine Java-Themen 4
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
C Code of a method longer than 65535 bytes Allgemeine Java-Themen 3
K The method clone() from the type Object is not visible. Allgemeine Java-Themen 9
O Pointer/reference on method Allgemeine Java-Themen 10
T Java Class Intrumentation mit Annotations in Laufzeit Allgemeine Java-Themen 1
hdi Zu Reflections & Annotations Allgemeine Java-Themen 10
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
L Annotations um Gültigkeit von Attributen zu definieren? Allgemeine Java-Themen 4
K Annotations der aufrufenden Methode ermitteln Allgemeine Java-Themen 11
ruutaiokwu junit mit annotations geht nicht? Allgemeine Java-Themen 5
W Annotations selbst erstellen und auswerten Allgemeine Java-Themen 4
dunhillone Mittels Annotations Methoden "erweitern"? Allgemeine Java-Themen 11
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
Landei Annotations ableiten Allgemeine Java-Themen 2
G Annotations. warum ? Allgemeine Java-Themen 9
L Annotations mit Vererbung Allgemeine Java-Themen 4
H eigene Annotations Allgemeine Java-Themen 2
byte Annotations: Arrays auslagern Allgemeine Java-Themen 2
G @Annotations Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben