2012-07-11 24 views
21

İlkbahar sınıflarımın çoğunu Spring "stuff" e ihtiyaç duymadan test edebilirim.Birim testi İlkbahar AOP yöntemleri

I can çok Spring kullanmadan birim test @Before öneriler şekli:

örnek kod:

@Before("execution(* run(..)) && " + "" + 
      "target(target) && " + 
     "args(name)") 
public void logName(Object target, String name) { 
    logger.info("{} - run: {}", target, name); 
} 

Örnek testi: Bir ProceedingJoinPoint nesnesiyle

@Test 
public void testLogName() { 
    aspect.setLogger(mockLogger); 
    aspect.logName(this,"Barry"); 
    assertTrue(mockLogger.hasLogged("TestAspect - run: Barry")); 
} 

Ancak @Around öneriler fiyatları :

ProceedingJoinPoint nesnesini nasıl başlatacağımı bilmiyorum. Tüm Bahar uygulama içeriğine başlamadan bu sınıfı nasıl test edebilirim?

+0

Tam bir kod verebilir misiniz, @Before için test vakasını nasıl uyguladınız? Bunu uygulamada yardıma ihtiyacım var. –

cevap

49

Sen programlama bir proxy oluşturarak Bahar Aspect test edebilirsiniz:

MyInterface target = new MyClass(); 
AspectJProxyFactory factory = new AspectJProxyFactory(target); 
MyAspect aspect = new MyAspect(arg); 
factory.addAspect(aspect); 
MyInterface proxy = factory.getProxy(); 

... o zaman proxy üzerinde yöntemleri çağırmak ve aspect, proxy ve target hakkında iddialarda bulunan yapabilirsiniz.

+1

Harika thx - sonunda bu şeyleri düzgün bir şekilde test edebilirim. Bunu programlı olarak neden yapmanız gerektiğine dair herhangi bir fikrin var mı? MyAspect'i bir fasulye olarak ilan ettim ve bu bağlamı birim testine yükledim ve bu yüzden yürütülmesi gereken yönü bekledim - ama sadece onu tarif ettiğin şekilde çalışıyor ... – CodeSeavers

+0

Pekala * Ben * bunu yapmak zorundayım çünkü bunu yapmak zorundayım Ünite testlerimde Spring'i kullanmayın. Ünite testlerinizde bir yay kapsamını başlatmak istiyorsanız, o zaman normal yay faktörleri geçerlidir. – slim

+0

İddialar neye benziyordu? Bazı örneklerin var mı? – mip