Arquillian能集成Java EE容器(像JBoss AS和GlassFish)和Servlet容器(比如Tomcat和Jetty),也可以在云服務里運行測試。對容器的支持能讓開發人員針對各種技術平臺進行測試,包括Java EE 5和6、Servlet環境、OSGi、嵌入式EJB和獨立的CDI。
Arquillian團隊前不久發布了1.0.0.Final版本,并打算在不久之后再發布一個版本。
新版本包含的一些功能有:
能在單個測試里跨多個容器和多個域控制器進行多次部署
新配置方案支持一個容器進行多份配置
用Java屬性覆蓋表達式語言(EL),比如屬性和配置里的賦值
測試方法可以明確定制
對容器的生命周期進行細粒度的控制
InfoQ有幸對Arquillian的發言人Dan Allen進行了采訪,向他了解了測試框架的功能,該框架的方法和其他測試策略有何不同,以及以后版本會有哪些可用的新特性。
InfoQ:Arquillian是哪種類型的測試?單元測試、集成測試、功能測試、性能測試、安全測試,抑或是其他?
Dan Allen:單元測試的下一步就是Arquillian,它提供的平臺能覆蓋現有測試所不能涵蓋的范圍。只要你開始把組件集成到運行時環境里,無論這個運行時環境是嵌入式的還是獨立式的,你都需要一個服務去管理運行時環境。這正是Arquillian的核心關注點。Arquillian把測試帶到運行時環境里,然后委托給擴展模塊來執行,這些擴展模塊能集成組件、調用服務、瀏覽網頁、衡量性能指標、報告代碼覆蓋率、通過云運行測試,當然這只是舉了幾個例子。Arquillian是測試自動化的引擎。
Arquillian揭示出,部分內容的單元測試在整個測試計劃里發揮的作用微乎其微,只使用JUnit和TestNG是不夠的。最終,你必須要為每種測試類型各寫一個基類。Arquillian能把不同的測試服務(比如Selenium、DBUnit、JaCoCo)集成到一個單一的管道里。
如果你正在使用CDI或Spring這樣的編程模型,你可能也會決定用Arquillian來測試嵌入式服務容器里的各個單元。這模糊了單元測試和集成測試之間的界線,但由于你能專注測試的目標,而不是測試該如何劃分,所以還是很不錯的。
InfoQ:Arquillian框架有哪些子項目?
Dan:Arquillian本身沒有子項目。相反,它把那些能插入核心平臺的模塊組織成了網絡圖的形式。這么安排能很好地集成Arquillian,無論是從內部還是從外部。事實上,我們更希望項目能為他們自己的Arquillian擴展模塊提供服務,因為這樣集成得更緊密,也能和項目的發布保持同步。
目前有五類模塊:
容器適配器
測試增強器
測試運行器
擴展模塊
工具
Arquillian還集成了三個ShrinkWrap模塊:歸檔文件、描述符和解析器。
容器適配器是Arquillian里最常見的模塊類型,因為我們打算支持所有主要的Java容器(也就是服務器),最終也會支持一些非Java的服務器。項目目前為十二款容器提供了適配器,包括JBoss AS、GlassFish、Apache Tomcat、Jetty、WebLogic Server、Websphere AS,還有OpenShift和CloudBees這兩個云提供程序。這些適配器都提供了三種管理方式(嵌入式、管理式和遠程的),而且覆蓋好幾個主要發布版本。這就有很多適配器了:)
另一個主要模塊是Arquillian Drone及其配套組件Arquillian Graphene。有了這些擴展模塊,搭建、管理Selenium、WebDriver及其他瀏覽器驅動器就能省去所有的麻煩。你需要做的只是把瀏覽器API注入到你的測試里,并給它發送命令。通過把應用部署和瀏覽器控制集成在一起,你完全可以進行端到端的測試。OpenShift前不久宣布集成了SauceLabs,這能讓你從運行在云里的Jenkins上,用Arquillian執行跨平臺的瀏覽器測試。
和Drone有些類似的擴展模塊是Android擴展,它在設備上安裝了應用程序,然后會控制Android的UI,而不是瀏覽器。
還有兩個模塊剛剛開始,我們正密切關注著。一個是Arquillian Persistence Extension,它為DBUnit提供了聲明式的控制和附加組件;另一個是Arquillian Spring Extension,它允許Spring開發人員用Arquillian替換Spring的測試框架,并能訪問所有的Arquillian擴展模塊,特別是Drone。Google Summer of Code項目目前就是在開發Arquillian Spring Extension。
最后要提一下的是用于JBoss Forge的Arquillian插件,這個模塊提供了平臺的入口點。簡單說來,想要在你的項目里搭建Arquillian,沒有比這更快的方式了,只需要一條命令就可以搞定。
InfoQ:Arquillian框架有沒有受BDD和TDD這些測試實踐的影響?
Dan:設計Arquillian的時候,Arquillian的使用者和被測試內容都受到了BDD、TDD、ATDD等測試實踐的影響。
我們希望開發人員能盡早測試、經常測試、并能真實測試。作為開發人員,你可以編寫一組使用嵌入式或模擬運行時環境的單元測試和集成測試,結果到后面你才會發現違反了運行時相關的基本假設(類加載行為、可見性、文件系統方案),這讓你的所有工作付之東流。你必須去測試真實的東西。到目前為止,這么做還是很冒險的,因為這意味著要打包你的項目并全部部署。利用ShrinkWrap的微部署,你可以創建非常有針對性的集成測試,并把它們作為沿途的檢查點。項目過程中你就再也不用掩面嘆息了。
我常說Arquillian是個學習環境。在開發過程的早期,你就可以在“真實的”運行時環境里測試你對框架的假設或理解了。你可能會驚訝于這種學習方式是如此之快。
Arquillian也在努力集成、支持BDD和ATDD框架,比如Spock、JBehave和Thucydides。這是明年發展的主要領域。
InfoQ:Arquillian支持在容器里測試應用,這種做法會不會導致開發人員不重視一些設計實踐,比如類之間的松耦合、隔離和模塊化?
Dan:這個問題問得好。Arquillian把測試代碼放在了容器里,這確實很容易讓你忽略前面提到的一些設計實踐,不過ShrinkWrap會對此有所平衡。每編寫一個測試用例,開發人員必須得有意識地去決定什么東西要放在測試歸檔文件里,測試歸檔文件會成為測試的縮影(因而也是classpath可見性的范圍)。雖然有些開發人員起初會覺得這很乏味,但很快他們就會認識到,這提供了一種獨特的隔離級別,可以仔細研究類和庫之間的依賴關系。
原文轉自:http://www.anti-gravitydesign.com