Tôi đã theo dõi gần như tất cả các câu hỏi của JUnit + Maven + AspectJ ở đây và thậm chí tôi khá chắc chắn rằng tôi đã thiết lập mọi thứ đúng cách, tôi không thể kiểm tra nó.AspectJ + Junit + Maven - pointcut được công nhận trong các bài kiểm tra nhưng NoSuchMethodError: aspectOf() exception ném
Tôi có một mô-đun Maven chỉ với một khía cạnh:
@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");
}
}
Rất khá đơn giản. Tất cả những gì tôi muốn làm là làm điều gì đó trước và sau mỗi lần thực hiện bất kỳ phương pháp thử nào trong dự án thử nghiệm của tôi, được chú thích với @Test
.
Bây giờ, tôi đang sử dụng aspectj-maven-plugin
trong <build>
của tôi như thế này:
<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) Tôi không có mục tiêu compile
trong <execution>
vì tôi không có lớp học trong src/main/java
(đó là sự thật và nó là ok, tôi biết những gì tôi đang làm)
2) tôi có
<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>
trong <dependencies>
secti của tôi trên. Không có gì liên quan đến aspectj.
3) Tôi chắc chắn rằng các lớp thử nghiệm của tôi được công nhận bởi aspectj vì tôi thấy rằng các điểm tham gia đã được thông báo. Tôi thấy:
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))
Giữ nguyên sau khi được tư vấn.
4) khi tôi thử phiên bản 1.7.3 thay vì 1.6.11, thông báo này xuất hiện với tôi trong khi điểm tham gia đã được xử lý: expected 1.6.11 found 1.7.3
. Tôi đoán đó là một thông điệp từ aspectj-maven-plugin
của phiên bản 1.4, tôi không thực sự biết khi nào 1.5 sẽ được phát hành để loại bỏ điều này. Phiên bản nào tương thích?
5) "mã" của tôi trông như thế này :)
@RunWith(JUnit4.class)
public class TestClass() {
@Test
public void test01(){
}
}
6) Tôi đã 1.6.0_39 biên dịch Oracle Java, Tôi đang biên soạn tất cả mọi thứ với 1,6 (mục tiêu, nguồn .. tất cả)
Vì vậy, các khía cạnh công nhận, áp dụng, tôi sẽ thực hiện kiểm tra như mvn clean test
nhưng tất cả tôi nhận được là:
java.lang.NoSuchMethodError:
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect;
và khá dài stacktrace.
Tôi không có bất kỳ số nào đầu mối những gì có thể sai, thực sự.
là nó hoạt động cho java 8? –