2012-01-16 36 views
2

我想編寫一些在Adobe CQ 5.4中運行的單元測試。我在做什麼這篇文章中CQ中描述來進行測試:編譯Adobe CQ5 CRXDE中引用Felix OSGI包的單元測試JUnit代碼

http://jtoee.com/2011/09/799/

然而,當我在我的Java代碼創建單元測試類,它不會CRXDE內編譯,因爲它不能解析org.junit命名空間。我按照描述(Apache Sling JUnit Core)安裝並激活了Felix中的JUnit包,但我猜測爲了在CRXDE中找到這個活動的Felix包,我還需要做其他事情。在CQ5實例中的菲利克斯捆綁我連接到顯示了這些導出包:

junit.framework,version=4.8.2 
org.apache.sling.junit,version=1.0.7.SNAPSHOT 
org.apache.sling.junit.annotations,version=1.0.7.SNAPSHOT 
org.junit,version=4.8.2 
org.junit.matchers,version=4.8.2 
org.junit.rules,version=4.8.2 
org.junit.runner,version=4.8.2 
org.junit.runner.manipulation,version=4.8.2 
org.junit.runner.notification,version=4.8.2 
org.junit.runners,version=4.8.2 
org.junit.runners.model,version=4.8.2 

在此示例中的單元測試下面的代碼,最後三個import語句「解決不了。」

import org.apache.sling.api.resource.*; 
import org.junit.*; 
import org.junit.runner.*; 
import org.apache.sling.junit.annotations.*; 

@RunWith(SlingAnnotationsTestRunner.class) 
public class MyUnitTest { 

    public ResourceResolver getResourceResolver() { 
     try { 
      return getResourceResolverFactory(). 
        getAdministrativeResourceResolver(null); 
     } catch (LoginException e) { 
      fail(e.toString()); 
     } 
     return null; 
    } 
} 

這是我的新手理解是安裝在費利克斯OSGi包應該可以訪問對我來說,在使用CRXDE我的Java類引用,但情況並非如此,因爲我安裝了JUnit包。爲什麼不?我需要做什麼才能獲得CRXDE以找到OSGI包引用並在CRXDE中編譯?

+0

嗨肖恩,我試圖創建相同的測試設置。你有沒有取得任何成功的解決方案呢? Thx很多幫助。你能指點我一些體面的信息嗎? – Denis 2012-04-03 14:18:53

+0

我還沒有找到一個答案又爲何安裝捆綁到菲利克斯是不夠的CRXDE來解決引用。最後我做的是從我的代碼中重新引用Felix中安裝的jar文件。我在源代碼包含我的單元測試創​​建了一個單獨捆,以及我在同一水平作爲我的src文件夾增加了一個「庫」的文件夾,並把的junit-4.10.jar和org.apache.sling.junit.core- 1.0.7-SNAPSHOT.jar這樣我的代碼就可以解析引用。這與Bertrand所做的相似......我只是不明白爲什麼需要重新引用。 – Shawn 2012-04-03 18:56:41

回答

2

你在做什麼看起來一見鍾情。

您是否在安裝所需的軟件包後嘗試重新啓動CQ?在理論上,這不應該被要求,但我想知道如果捆綁編譯器正在拾取新的可用包。

我在http://dl.dropbox.com/u/715349/cq5-examples/junit-tests-1.0.zip(MD5 2915123ad581aa225bd531247ea02878)上傳的內容包用類似簡單的例子,在一個新的CQ 5.4實例的實例測試通過http://localhost:4502/system/sling/junit/

你可能想嘗試正確執行安裝此包後我抽樣並與你比較。

+0

感謝您將它放在一起!我在安裝/激活Apache Sling JUnit Core包後嘗試重新啓動CQ,但仍然無法編譯我的測試類。我看着這個示例代碼,我可以看到的最大的一件事是,在應用程序「安裝」目錄/的JUnit測試/安裝包含兩個明顯人工添加的.jar文件(除了動態添加com。示例.junit-tests.jar):junit-4.8.2.jar,org.apache.sling.junit.core-1.0.6.jar。如果我已經在Felix中安裝了JUnit包,我真的需要在我的單元測試包中包含這兩個額外的jar包嗎? – Shawn 2012-01-17 16:22:11

+0

測試需要的兩個額外的包,這樣,如果他們是尚未激活(或者,如果它是你有舊版本),你需要添加它們。 – 2012-06-21 08:23:18

2

簡答

的問題是不與CQ,問題是CRXDE。 CRXDE會自動在本地機器上下載並緩存所需的jar文件,因此不必從CQ中不斷檢索。

如果您切換到'Package Explore'導航欄,然後展開項目'{SERVER} {PORT} {HASH}',您應該會看到一個名爲Referenced Libraries的文件夾。右鍵單擊並選擇構建路徑>>配置構建路徑。從那裏你可以添加你想要的任何依賴到項目中。

長的答案

CRXDE不是創建包的好工具。通過一個完全成熟的IDE(如Eclipse)創建捆綁包並利用Apache Maven作爲構建工具會更好。 Apache Maven可以自動管理你的依賴關係,在你的代碼上運行測試並單獨測試與運行時依賴關係。

通過這種方式,您可以避免在您的OSGi控制檯中加載不需要這樣一個jUnit的依賴關係,並且可以更好地控制您的bundle的構建和部署方式。

日有一個非常好的指南,讓您設置了與Eclipse建設CQ項目。 http://dev.day.com/docs/v5_2/html-resources/cq5_guide_developer/ch04s02.html

+0

我可以按照您描述的方式添加參考,但爲什麼我需要這樣做呢?我認爲通過在Felix中安裝捆綁包,CRXDE在加載時會意識到它(引用它)。這似乎並沒有發生。即使使用這種方法添加一個,我也找不到Felix捆綁包,但它們最終會從我的文件系統中添加,而不是從正在運行的CQ實例中刪除。我的構建路徑中顯示的所有庫都來自{SERVER} _ {PORT} _ {HASH}位置,但我添加的內容來自c:\ dir之類的內容。如何找到我在Felix中安裝的JUnit捆綁軟件? – Shawn 2012-01-18 19:58:51

+0

這篇文章(http://dev.day.com/docs/en/cq/current/developing/developmenttools.html#How%2520to%2520Set%2520Up%2520the%2520Development%2520Environment%2520with%2520Eclipse)比您鏈接的那個,並且它說:「當您通過創建新組件和Java包開發複雜應用程序時,推薦使用CRXDE。」我知道總有其他方法可以做事,但對於這個問題,我在使用CRXDE的背景下提出了要求。 – Shawn 2012-01-18 20:08:42