2013-07-14 16 views
9

Hemen hemen tüm JUnit + Maven + AspectJ sorularını burada izledim ve her şeyin düzgün ayarlandığından bile eminim, test edemiyorum o.AspectJ + Junit + Maven - pointcut testlerde kabul edildi ama NoSuchMethodError: aspectOf() istisnası atıldı

@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"); 
    } 
} 

Çok oldukça basit:

Ben sadece bir yönü ile bir Maven modülü var. Tek yapmak istediğim, test projemde @Test no'lu açıklamasının herhangi bir test yönteminin uygulanmasından önce ve sonra bir şeyler yapmak. Şimdi

, böyle benim <build> yılında aspectj-maven-plugin kullanıyorum:

<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) Ben src/main/java (bu doğru oldu 'hiçbir sınıfları çünkü <execution> hiçbir compile amacı var, bildiklerimi Ben)

2) benim <dependencies> secti içinde

<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> 

sahip yapıyorum üzerinde. Aspectj ile ilgili daha fazla bir şey yok.

3) Ben bu noktalar tavsiye edildi katılmak gördükleri için benim test sınıfları AspectJ tarafından tanınan eminim. Gördüğüm kadarıyla:

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)) 

Aynı şey tavsiye sonrası için de geçerlidir. katılmak noktaları tedavi edildi ise sürüm 1.7.3 yerine 1.6.11 denedik

4), bu mesaj bana göründü: expected 1.6.11 found 1.7.3. Bu sürüm 1.4'ün aspectj-maven-plugin 'undan bir mesaj olduğunu tahmin ediyorum, 1.5'in ne zaman kurtulacağını bilmiyorum. Hangi sürümler uyumludur? Bu :) gibi

5) My "kod" görünüyor

@RunWith(JUnit4.class) 
public class TestClass() { 

    @Test 
    public void test01(){ 
    } 
} 

6) Ben 1.6 (hedefe, kaynak ile herşeyi 1.6.0_39 Oracle Java derleyicisi derleme am var .. hepsi)

Yani, yönleri, uygulanan, ben mvn clean test gibi testleri yürütmek için gidiyorum tanınan ama olsun tüm şudur:

java.lang.NoSuchMethodError: 
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect; 

ve oldukça uzun StackTrace.

Gerçekten yanlış ne olabileceğini herhangi ipucu yok.

+0

java için çalışıyor 8 de mi? –

cevap

9

Yani, hüner bu kadar

javactır ile ancak ajc (aka AspectJ'yi-maven-plugin) ile benim yönleriyle o kütüphaneyi derlemeye oldu. Ben sadece bu özellikleri ile maven modülüne eklemek zorunda kaldım (bunlar src/main/java'da)

Yönlendirmeler, 'a sahip olmanız için 1 eklenmiştir.6 kaynak/hedef/uygunluk seviyesi

AspectJ MODÜLÜ size

HEDEF MODÜL

ile yönlerini kullanmak istediğiniz hedef modüle bir test bağımlılık olarak bu modülü eklemek zorunda Daha

<!-- Build --> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.4</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <complianceLevel>1.6</complianceLevel> 
       <verbose>true</verbose> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies> 
      </dependencies> 
     </plugin> 
    </plugins> 
</build> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.4</version> 
      <configuration> 
       <aspectLibraries> 
        <aspectLibrary> 
         <groupId>that-artifact</groupId> 
         <artifactId>mentioned-above</artifactId> 
        </aspectLibrary> 
       </aspectLibraries> 
       <source>1.6</source> 
       <target>1.6</target> 
       <complianceLevel>1.6</complianceLevel> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>test-compile</goal> 
        </goals> 
        <configuration> 
         <showWeaveInfo>true</showWeaveInfo> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Her yerde 1.6 düzeyini kullanmalısınız

+0

awsome teşekkür ederim adamım –

İlgili konular