ここでほぼすべてのJUnit + Maven + AspectJの質問に従いましたが、すべてが適切に設定されていると確信していますが、テストできません。
私はMavenモジュールを1つの側面だけで持っています:
@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.6.11 ではなくバージョン 1.7.3 を試したところ、ジョイン ポイントの処理中に次のメッセージが表示されましたexpected 1.6.11 found 1.7.3
。バージョン 1.4からのメッセージだと思いますがaspectj-maven-plugin
、これを取り除くために 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;
そしてかなり長いスタックトレース。
何が間違っているのか、まったくわかりません。