2016-02-19 33 views
0

在單元測試AspectJ的失敗,我們有一系列的單元測試,他們路過我的罰款之前,嘗試添加了依賴注入和方法記錄時間的一些方面被稱爲在我們休息的終點。autoweaving中的IntelliJ

在之前的測試中失敗的單元測試,我們得到兩個奇怪的錯誤:

[[email protected]] error aspect 'com.lutherconsulting.aphirm.log.DurationLoggingAspect' woven into 'com.lutherconsulting.aphirm.rest.ClientRest' must be defined to the weaver (placed on the aspectpath, or defined in an aop.xml file if using LTW). 

[[email protected]] error aspect 'com.lutherconsulting.aphirm.log.DurationLoggingAspect' woven into 'com.lutherconsulting.aphirm.log.DurationLoggingAspect' must be defined to the weaver (placed on the aspectpath, or defined in an aop.xml file if using LTW). 

我們使用AspectJ的Maven插件就讓它方面autoweave成Web應用程序。下面是我們針對Maven的pom.xml的配置。

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.8</version> 
      <configuration> 
       <showWeaveInfo>true</showWeaveInfo> 
       <complianceLevel>1.8</complianceLevel> 
       <source>1.8</source> 
       <target>1.8</target> 
       <Xlint>ignore</Xlint> 
       <encoding>UTF-8</encoding> 
       <verbose>true</verbose> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>test-compile</goal> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

奇怪的是,如果我建立war文件並將其部署到一個Tomcat實例這一切工作完全正常,或者如果我跑了我們所有的黃瓜功能測試。當我做這兩者中的任何一個時,方面編織得很好,並且我獲得了有關我註釋的其餘方法持續時間的數據,這些數據正確記錄到數據庫中。如果我從intelliJ運行特定的測試包或嘗試在intellij中運行所有的junit測試,它會因爲這兩個錯誤而失敗

這是我在Intellij中作爲運行/調試配置執行的方式單元測試?我沒想到我們的我們的應用程序的結構比任何正常的Web應用程序

- src 
    | - main 
     | - java 
     | - packages 
     | - resources 
    | - test 
     | - java 
     | - packages 
     | - resources 
- pom.xml 

我很欣賞的

+0

對我來說這只是工作,我只是試過。也許你想重新導入你的Maven項目,或者只是在IDEA中打開Maven自動導入。儘管我使用編譯時編織。你使用LTW嗎? – kriegaex

回答

0

任何想法,據我所知你是從的IntelliJ使用自己的亞軍運行測試和不同不是maven。

因此,你必須配置爲通過AspectJ的Maven的插件使用maven運行的織工。問題是你的IntelliJ運行器沒有運行maven,因此它的編織器插件也沒有運行。

我可以想出一個想法,你可以在IntelliJ中運行你的maven測試目標,用maven配置運行所有的測試,所以它會檢測aspectj-maven-plugin並運行weaver。在這裏,您可以檢查如何運行Maven目標: https://www.jetbrains.com/idea/help/executing-maven-goal.html

在另一方面,根據這個鏈接,您必須啓用負載時編織在的IntelliJ http://www.aspectprogrammer.org/blogs/adrian/2006/02/a_practical_gui_2.html

引用它說的鏈接:

打開「運行/調試配置」對話框使用 工具欄的下拉列表中。點擊「+」圖標創建新配置並將其命名爲 「測試」。

對於這個項目,我選擇了「所有包」並搜索測試 「在整個項目」。

現在,所有你需要做的就是添加在 帶來的AspectJ LTW代理虛擬機啓動參數:

-javaagent:LIB/aspectjweaver。jar

「:」後面的部分應該是您的aspectjweaver.jar副本的路徑。在這種情況下,我將Spring發行版中的 aspectjweaver.jar複製到我的項目的lib目錄 (它不需要位於項目的類路徑中)。如果你願意,你也可以使用AspectJ 5最終版的jar。

此外,您還可以檢查配置AspectJ的方面,檢查此鏈接來閱讀它 https://www.jetbrains.com/idea/help/aspectj.html

+0

我一直在積極搜索這條路。我還沒有找到如何配置intellij來運行maven配置的所有測試。你知道如何做到這一點,或指出我如何設置這個文件? – jspriggs

+0

@jspriggs我已經更新了答案,看看它 –

0

到底,什麼結果來解決,這是進入在的IntelliJ的項目結構,上在AspectJ設置中有一個用於編譯後編織模式的複選框。通過檢查確保在執行測試之前在Intellij中進行編織。