開發人員期望在嵌入式服務容器(例如Weld Embedded)里運行測試,這能敦促他們盡量避免在邊界層之外和容器資源有過多的耦合。雖然他們在開發過程中可能會使用嵌入式容器,但在進行持續集成時,他們會對運行在“真實”容器里的測試覺得心安。
總之,Arquillian和ShrinkWrap能互相牽制,平衡好有意義的反饋和良好的設計。
InfoQ:Arquillian測試框架有什么局限?
Dan:Classpath管理和不夠Java模塊化。開發人員為運行在容器里的代碼編寫測試的時候,經常會遇到這些問題。Java工具(構建工具、IDE)和運行時環境(應用服務器)往往不太關心classpath,或者沒有其他選擇。結果在運行時環境里,開發人員就開始遇到非常奇怪的問題,卻把這些問題歸因于Arquillian或ShrinkWrap。真正可以抱怨的是Arquillian還沒有進行Java模塊化。使用嵌入式容器時,這個問題特別常見。我最近在Arquillian的博客上討論了這個問題。幸運的是,解決辦法很簡單,使用運行在獨立虛擬機里的受管容器就可以了。
另一個局限是可用性方面的一些問題。開發人員在不同的容器適配器之間切換時還有一點兒麻煩,一部分原因是切換需要使用classpath配置,另一部分原因是容器配置的選擇還不夠智能。目前開發人員使用Arquillian,必須要去學習的內容只有這些。如果開發人員閱讀了Arquillian的手冊,他們就能順利開始并進行。
我們在手冊里傾注了很多心血,以便幫助開發人員上手。目前所作的這些非常有用。但我們的文檔仍然不是很全,所以我們還需要繼續關注文檔這部分內容,好幫助開發人員順利進行。
InfoQ:關于新功能和增強,以后有什么詳細計劃么?
Dan:什么都可能是新功能和增強。Arquillian的文化是鼓勵創新和豐富的想象。這里先讓大家了解一下我們對未來的設想,請查看團隊向Google Summer of Code 2012計劃提出的十二條建議。那個列表很好地描繪了我們的預想。這里我列出幾個關鍵條目:
Spring Beans和MVC的測試
在運行的測試里進行瀏覽器截圖的自動化視覺對比
自動化的JavaScript測試
更多有效的持久化測試
用JRebel進行Java類和資源的自動重部署
增強ShrinkWrap描述符和解析器,從而簡化對部署組裝的控制
支持非Java服務器,比如Apache HTTPD
可用性
感興趣的讀者可以檢出專門設計的指南,從一個空的工作區開始,按照上面的內容用Arquillian得到第一個全部通過的Green Bar。