Jeg kan godt se pointen med Aspectj, men jeg synes mit eksempel er for lille til at involvere et 3. parts produkt på den måde. Egentlig ville jeg bare høre om Java som sprog tilbød denne feature.
Jeg ved godt løsningen er dyr rent performance mæssigt. Men det er kun til unit test, så jeg behøver ikke tage hensyn til det. Ved at undgå aspectj får jeg ikke 3. parts kode ind i mine tests. Jeg har ikke noget politisk imod apsectj, men det er bare overkill til mit problem :=)
Jeg tror bare de itererer over metode navne i den pågældende klasse. Alle dem der starter med test, bliver så bare eksekveret. Egentligt ganske simpelt.
Der skal faktisk lidt til for at få AspectJ til at gøre det efterspurgte.
Jeg har lavet et lille eksempel.
Test.java ---------
public class Test { public static void sub1() { System.out.println(Locator.current()); } public static void sub2() { sub3(); } public static void sub3() { System.out.println(Locator.current()); } public static void main(String[] args) { sub1(); sub2(); } }
Locator.java ------------
import java.util.HashMap; import java.util.Stack;
public class Locator { private static HashMap data = new HashMap(); public static void enter(String name) { String id = Thread.currentThread().getName(); Stack stk = (Stack)data.get(id); if(stk == null) { stk = new Stack(); data.put(id, stk); } stk.push(name); } public static void leave() { String id = Thread.currentThread().getName(); Stack stk = (Stack)data.get(id); stk.pop(); } public static String current() { String id = Thread.currentThread().getName(); Stack stk = (Stack)data.get(id); return (String)stk.peek(); } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.