Ich habe fast alle JUnit + Maven + AspectJ Fragen hier gefolgt und sogar ich bin mir ziemlich sicher, dass ich alles richtig eingestellt habe, kann ich nicht testen es.AspectJ + Junit + Maven - Pointcut in Tests erkannt, aber NoSuchMethodError: aspectOf() Exception ausgelöst
Ich habe eine Maven-Modul mit nur einem Aspekt:
@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");
}
}
Sehr ziemlich einfach. Ich möchte vor und nach jeder Ausführung einer Testmethode in meinem Testprojekt etwas tun, das mit @Test
versehen ist.
Nun, ich bin mit aspectj-maven-plugin
in meinem <build>
wie folgt aus:
<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) Ich habe keine compile
Ziel in <execution>
, weil ich keine Klassen in src/main/java
haben (das ist wahr, und es ist in Ordnung, ich weiß, was ich tue)
2) I
<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>
in meinem <dependencies>
Abschnit haben auf. Nichts mehr über aspectj.
3) Ich bin mir sicher, dass meine Testklassen von aspectj erkannt werden, weil ich sehe, dass Join Points empfohlen wurden. Ich sehe:
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))
Das gleiche gilt für nach Beratung.
4) Als ich Version 1.6.1 anstelle von 1.6.11 ausprobierte, erschien mir diese Nachricht, während Join-Punkte behandelt wurden: expected 1.6.11 found 1.7.3
. Ich denke, es ist eine Nachricht von aspectj-maven-plugin
der Version 1.4, ich weiß nicht wirklich, wann 1.5 Release sein wird, um das loszuwerden. Welche Versionen sind kompatibel?
5) Mein "Code" sieht wie folgt aus :)
@RunWith(JUnit4.class)
public class TestClass() {
@Test
public void test01(){
}
}
6) Ich habe 1.6.0_39 Oracle Java-Compiler, ich kompilieren alles mit 1,6 (Ziel, Quelle .. alle)
So Aspekte anerkannt, angewendet werde ich Tests wie mvn clean test
auszuführen, aber alles, was ich bekommen ist, dass:
java.lang.NoSuchMethodError:
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect;
und ziemlich lange Stacktrace.
Ich habe keine keine Ahnung, was könnte falsch sein, wirklich.
funktioniert es für Java 8 auch? –