AspectJ + Junit + Maven - pointcut распознается в тестах, но генерируется исключение NoSuchMethodError: aspectOf ()
Я следил почти за всеми вопросами JUnit + Maven + AspectJ здесь, и даже я уверен, что все настроено правильно, я не могу это проверить.
У меня есть модуль Maven только с одним аспектом:
@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");
}
}
Очень просто. Все, что я хочу сделать, это сделать что-то до и после каждого выполнения любого метода тестирования в моем тестовом проекте, который отмечен@Test
.
Теперь я используюaspectj-maven-plugin
в моем<build>
нравится:
<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) у меня нетcompile
цель в<execution>
потому что у меня нет занятий вsrc/main/java
(это правда, и это нормально, я знаю, что я делаю)
2) у меня есть
<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>
в моем<dependencies>
раздел. Ничего более в отношении аспекта.
3) Я уверен, что мои классы тестирования распознаются aspectj, потому что я вижу, что точки соединения были рекомендованы. Понятно:
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))
То же самое касается и после совета.
4) когда я попробовал версию 1.7.3 вместо 1.6.11, это сообщение появилось у меня во время обработки точек соединения:expected 1.6.11 found 1.7.3
, Я думаю, это сообщение отaspectj-maven-plugin
версии 1.4, я не знаю, когда выйдет 1.5, чтобы избавиться от этого. Какие версии совместимы?
5) Мой "код" выглядит так :)
@RunWith(JUnit4.class)
public class TestClass() {
@Test
public void test01(){
}
}
6) У меня 1.6.0_39 Oracle Java компилятор, я компилирую все с 1.6 (цель, источник .. все)
Итак, аспекты признаны, применены, я собираюсь выполнить тесты, какmvn clean test
но все, что я получаю, это:
java.lang.NoSuchMethodError:
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect;
и довольно длинная трассировка стека.
у меня нетЛюбые Понять, что может быть не так, правда.