AspectJ + Junit + Maven - pointcut reconhecido nos testes mas exceção NoSuchMethodError: aspectOf () lançada
Eu segui quase todas as questões do JUnit + Maven + AspectJ aqui e até tenho certeza que tenho tudo configurado corretamente, não posso testá-lo.
Eu tenho um módulo Maven com apenas um aspecto:
@Aspect
public class AssertionAspect {
@Pointcut("execution(@org.junit.Test * *())")
public void testMethodEntryPoint() {}
@Before("testMethodEntryPoint()")
public void executeBeforeEnteringTestMethod() {
System.out.println("EXECUTE ACTION BEFORE ENTERING TEST METHOD");
}
@After("testMethodEntryPoint()")
public void executeAfterEnteringTestMethod() {
System.out.println("EXECUTE ACTION AFTER ENTERING TEST METHOD");
}
}
Muito bem simples. Tudo o que eu quero fazer é fazer algo antes e depois de cada execução de qualquer método de teste no meu projeto de teste que seja anotado com@Test
.
Agora estou usandoaspectj-maven-plugin
no meu<build>
como isso:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<aspectLibraries>
<aspectLibrary>
<groupId>my.package</groupId>
<artifactId>with-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.6</source>
<target>1.6</target>
</configuration>
<executions>
<execution>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
1) não tenhocompile
meta em<execution>
porque eu não tenho aulassrc/main/java
(isso é verdade e está tudo bem, eu sei o que estou fazendo)
2) eu tenho
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.3</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.3</version>
</dependency>
no meu<dependencies>
seção. Nada mais a respeito de aspectj.
3) Tenho certeza de que minhas classes de teste são reconhecidas por aspectj porque vejo que os pontos de junção foram recomendados. Entendo:
Join point 'method-execution(xyz)' in Type 'blabla'
(AppTestCase.java:124) advised by before advice from
'blabla' (my-aspects jar.jar!AssertionAspect.class(from AssertionAspect.java))
O mesmo vale para depois do conselho.
4) quando eu tentei a versão 1.7.3 em vez de 1.6.11, esta mensagem apareceu para mim enquanto os pontos de junção eram tratados:expected 1.6.11 found 1.7.3
. Eu acho que é uma mensagem deaspectj-maven-plugin
da versão 1.4, eu realmente não sei quando 1.5 será lançado para se livrar disso. Quais versões são compatíveis?
5) Meu "código" se parece com isso :)
@RunWith(JUnit4.class)
public class TestClass() {
@Test
public void test01(){
}
}
6) Eu tenho 1.6.0_39 Oracle Java compilador, estou compilando tudo com 1.6 (alvo, fonte .. todos)
Então, aspectos reconhecidos, aplicados, vou executar testes comomvn clean test
mas tudo que eu entendo é isso:
java.lang.NoSuchMethodError:
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect;
e muito longo stacktrace.
eu não tenhoqualquer pista o que pode estar errado, realmente.