Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RES: RES: [aspectj-users] How to?

Thanks Nicholas,

I already did that :-)

Andre

-----Mensagem original-----
De: aspectj-users-admin@xxxxxxxxxxx [mailto:aspectj-users-admin@xxxxxxxxxxx]
Em nome de Nicholas Lesiecki
Enviada em: domingo, 14 de novembro de 2004 18:51
Para: aspectj-users@xxxxxxxxxxx
Assunto: Re: RES: [aspectj-users] How to?

> For getting the test method name, you will want to advice
> TestCase+.test*(), and store away the thisJoinPointStaticPart
> somewhere (preferable in a ThreadLocal -- but since testing happens 
> from a single thread, a static variable somewhere, say in the aspect, 
> may be sufficient). Then use that variable in advice to 
> CatalogoProdutos.getEspecificacao(int).

Luckily (in this case) you can call testCase.getName(). Junit does you the
favor of storing the test method name in an instance variable.

Cheers,

Nicholas Lesiecki
Software Craftsman, specializing in J2EE, Agile Methods, and aspect-oriented
programming
m: 520 591-1849

Books:
* Mastering AspectJ: http://tinyurl.com/66vf
* Java Tools for Extreme Programming: http://tinyurl.com/66vt

Articles on AspectJ:
* http://tinyurl.com/66vu and http://tinyurl.com/66vv On Sep 13, 2004, at
8:10 PM, Ramnivas Laddad wrote:

> Adre,
>
> Here is the aspect that does work; some parenthesis weren't correctly 
> placed in my original solution. You should refactor the testsFlow() 
> pointcut to make it more understandable.
>
> package analizer;
>
> import pdv.*;
> import junit.framework.TestCase;
>
> public aspect DepedenceAnalizer {
>  pointcut testsFlow(TestCase testCase) :
>      execution(EspecificacaoProduto
> CatalogoProdutos.getEspecificacao(int)) &&
>      cflow((execution (* junit.framework.TestCase+.test*())) &&
>      this(testCase));
>   before(TestCase testCase) : testsFlow(testCase) {
>    System.out.println(testCase.getClass());
>  }
> }
>
> For getting the test method name, you will want to advice
> TestCase+.test*(), and store away the thisJoinPointStaticPart
> somewhere (preferable in a ThreadLocal -- but since testing happens 
> from a single thread, a static variable somewhere, say in the aspect, 
> may be sufficient). Then use that variable in advice to 
> CatalogoProdutos.getEspecificacao(int).
>
> -Ramnivas
>
> ===
> Ramnivas Laddad,
> Author, AspectJ in Action
> http://ramnivas.com
>
>
>
> André Dantas Rocha wrote:
>
>> Thanks Ramnivas,
>>
>> But still not working... Now, my pointcut picks nothing...
>>
>> My program is attached (Eclipse project).
>>
>> PDVTest.testeEntrarItem() calls PDV.entrarItem(int,int) that calls
>> CatalogoProdutos.getEspecificacao(int) that must me intercepted.
>>
>> In addition it possible to get the caller 'test' method too? (in this 
>> case
>> testeEntrarItem)
>>
>> Thanks,
>>
>> André
>>
>>
>>
>> -----Mensagem original-----
>> De: aspectj-users-admin@xxxxxxxxxxx
>> [mailto:aspectj-users-admin@xxxxxxxxxxx]
>> Em nome de Ramnivas Laddad
>> Enviada em: segunda-feira, 13 de setembro de 2004 22:07
>> Para: aspectj-users@xxxxxxxxxxx
>> Assunto: Re: [aspectj-users] How to?
>>
>> Use the following aspect:
>>
>> public aspect Analizer {
>>  pointcut testsFlow(TestCase testCase) :
>>      call(* MyClass.myMethod(..)) &&
>>      cflow(execution (* junit.framework.TestCase+.test*()) && 
>> this(testCase));
>>   before(TestCase testCase) : testsFlow(testCase) {
>>    System.out.println(testCase.getClass());
>>  }
>> }
>>
>> And you have just used the wormhole design pattern!
>>
>> -Ramnivas
>>
>> ===
>> Ramnivas Laddad,
>> Author, AspectJ in Action
>> http://ramnivas.com
>>
>>
>>
>> André Dantas Rocha wrote:
>>
>>
>>> Hi,
>>> I'd like to print the TestCase name from witch myMethod is called 
>>> (not directly, but in the TestCase control-flow).
>>> Is it possible via pointcut declaration? my code is shown below... 
>>> public class MyClass {
>>>  void xx() { myMethod(); }
>>>  void myMethod() {...}
>>> }
>>> public void testM() {
>>>  new MyClass().xx();
>>> }
>>> public aspect Analizer {
>>>  pointcut testsFlow() :
>>>      call(* MyClass.myMethod(..)) &&
>>>      cflow(execution (* junit.framework.TestCase+.test*()));
>>>   before() : testsFlow() {
>>>    System.out.println(thisJoinPoint); // not working, must print 
>>> "testM"...
>>>  }
>>> }
>>> Thanks,
>>> André
>>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>

_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users



Back to the top