AspectJ + Junit + Maven - punkt odniesienia rozpoznany w testach, ale NoSuchMethodError: zgłoszony wyjątek aspectOf ()
Śledziłem prawie wszystkie pytania JUnit + Maven + AspectJ tutaj, a nawet jestem pewien, że wszystko zostało poprawnie ustawione, nie mogę go przetestować.
Mam moduł Maven z jednym aspektem:
@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");
}
}
Bardzo prosty. Wszystko, co chcę zrobić, to zrobić coś przed i po każdym wykonaniu dowolnej metody testowej w moim projekcie testowym, który jest opatrzony komentarzem@Test
.
Teraz używamaspectj-maven-plugin
w moim<build>
lubię to:
<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) Nie mamcompile
cel w<execution>
ponieważ nie mam zajęć wsrc/main/java
(to prawda i jest dobrze, wiem co robię)
2) Mam
<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>
w moim<dependencies>
Sekcja. Nic więcej o aspekcie.
3) Jestem pewien, że moje klasy testowe są rozpoznawane przez aspektj, ponieważ widzę, że zalecane były punkty łączenia. Widzę:
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))
To samo dotyczy późniejszej porady.
4) gdy próbowałem wersji 1.7.3 zamiast 1.6.11, ten komunikat pojawił się podczas przetwarzania punktów łączenia:expected 1.6.11 found 1.7.3
. Myślę, że to wiadomość odaspectj-maven-plugin
wersji 1.4 nie wiem, kiedy 1.5 zostanie wydane, aby się tego pozbyć. Jakie wersje są kompatybilne?
5) Mój „kod” wygląda tak :)
@RunWith(JUnit4.class)
public class TestClass() {
@Test
public void test01(){
}
}
6) Mam kompilator Java 1.6.0_39 Oracle, kompiluję wszystko z 1.6 (cel, źródło .. wszystko)
Tak więc, aspekty uznane, zastosowane, zamierzam wykonać testy takie jakmvn clean test
ale wszystko, co dostaję, to:
java.lang.NoSuchMethodError:
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect;
i całkiem długi stacktrace.
nie mamkażdy naprawdę, co może być nie tak.