【发布时间】:2013-07-12 05:07:16
【问题描述】:
我在这里关注了几乎所有 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注释。
现在,我在我的<build> 中使用aspectj-maven-plugin,如下所示:
<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) 我在<execution> 中没有compile 目标,因为我在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> 部分。没有更多关于aspectj的内容。
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;
还有相当长的堆栈跟踪。
我没有任何线索可能出了什么问题,真的。
【问题讨论】:
标签: java maven junit aspectj aspectj-maven-plugin