我在这里关注了几乎所有的 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>
部分。没有更多关于方面j。
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;
和相当长的堆栈跟踪。
我真的不知道可能出了什么问题。