12

ここでほぼすべての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;

そしてかなり長いスタックトレース。

何が間違っているのか、まったくわかりません。

4

1 に答える 1