Я следил почти за всеми вопросами 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) Я уверен, что мои классы тестирования признаны аспектом, потому что я вижу, что точки соединения были рекомендованы. Я понимаю:
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) У меня компилятор Oracle Java 1.6.0_39, компилирую все с 1.6 (цель, исходник.. все)
Итак, аспекты распознаны, применены, я собираюсь выполнить такие тесты, как mvn clean test
, но все, что я получаю, это следующее:
java.lang.NoSuchMethodError:
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect;
и довольно длинный стек.
На самом деле я понятия не имею, никакого что может быть не так.