2013-12-12 123 views
1

我一直在爲我的Java類之一編寫一個JUnit測試用例,該類用CQ中的一些給定屬性創建一個頁面。對於它,它需要獲取SlingRepository和ResourceResolverFactory的參考。我正在使用this瞭解如何實現這一點。在文檔中,它表示使用「http:// $ HOST:$ PORT/system/sling/junit /」路徑的POST來執行服務器端的測試。但是在CQ中,我得到了這條路徑的404錯誤。CQ - 編寫服務器端JUnit測試

CQ中是否有任何替代URL?或者如果有人能提出更好的方法,我們將會真的很感激嗎

感謝

回答

4

一種方法是使用吊帶測試運行通過瀏覽器來執行JUnit測試。這是你提到的方法。我們必須先在此JAR中安裝代碼(org.apache.sling.junit.core)以添加允許您列出的URL工作的代碼。一旦該代碼在那裏,該URL將允許您使用測試運行器的內置頁面運行測試來運行/顯示測試:http://localhost:4502/system/sling/junit/)。我的團隊做了一段時間,但我們很快轉向了另一種方法 - 使用Intellij IDE爲CQ開發Java代碼並編寫JUnit測試,然後使用內置的JUnit測試運行器在IDE中執行測試。 Eclipse中也使用相同的方法。對於我們的團隊來說,這種方法非常出色,因爲它允許開發人員在IDE中保持上下文,而無需切換到瀏覽器來運行測試。

關鍵是能夠解析通過CQ安裝/可用的類的引用,例如SlingRepository和ResourceResolverFactory類 - 以及我們常用的其他東西,比如Resource,ResourceResolver,Node和Session類。我們使用CQ擴展(http://helpx.adobe.com/experience-manager/kb/HowToUseCQ5AsMavenRepository.html)來允許我們的CQ實例像Maven存儲庫一樣工作。這允許我們導出CQ JAR,以便隨後可以將它們作爲我們創建的Java項目中的依賴項引用,只要我們可能需要使用CQ本身提供的某些類時。

一旦我們建立了項目依賴關係,我們就能夠在Intellij IDE中編寫代碼和相應的單元測試。我們能夠在IDE中運行測試,允許開發人員保持上下文並處理將在CQ中運行的代碼,就像處理任何Java代碼一樣(包括諸如在調試模式下運行測試或使用代碼覆蓋,運行單一測試,在班級中運行所有測試,使用鍵盤快捷鍵啓動測試等)。對我們來說,這種方法比基於瀏覽器的Sling測試運行器有許多優點,所以我推薦這種方法。

一些潛在的因素:

  • 從CQ導出爲一個Maven回購可能不是最佳的性能 - 你可能需要的東西添加到您自己的Maven的回購以提高訪問速度
  • 您可能希望腳本的一些步驟,因此添加項目依賴關係不是手動過程,而是通過自動化過程完成
  • 您甚至可以導出全部 CQ JAR - 或添加一些腳本來解析並重新打包公共上課 - 並讓你的任何CQ課程都可以使用[R Java項目
+0

感謝很多人,會嘗試這在今天晚些時候 – user1764832

+1

Apache的吊索測試工具的文檔在http://sling.apache.org/documentation/development/sling-testing-tools.html點到示例(OsgiAwareTest),演示如何編寫在Sling實例(即CQ)中運行服務器端的測試。另請參見http://sling.apache.org/documentation/tutorials-how-tos/testing-sling-based-applications.html上的「測試Sling應用程序」,其中提供了有關測試可能「級別」的更全面情況。 –