2009-11-23 37 views
5

您可以分離IceFaces應用程序的組件,以便它們可以獨立測試,而不是在組裝的應用程序中使用類似Selenium或HttpUnit的東西?單元測試冰面

支持bean可以很容易地分離出來(如果寫入可測試),但我感興趣的測試應用程序的模板/顯示部分,而使用盡可能少的應用程序儘可能的休息。這可以做到嗎?怎麼樣?

有沒有辦法來渲染使用「僞數據」,我可以再通過傳統的單元測試運行ICEfaces的對象爲文本?

我能想到的方法可以做到這一切,但他們涉及創建多個應用程序(一個用於我希望測試的每個組件)。但是,這似乎是一種次優的處事方式。

+1

對於所有有抱負的框架設計師......請考慮在設計階段如何最好地適應測試。 :-P – 2009-12-04 22:37:28

+0

阿門到那!這絕對是一個需要考慮的設計限制。 – Ryan 2009-12-06 01:53:33

回答

1

如果我正確理解你的問題非常高的興趣,那麼它應該是爲你的網頁創建特殊的虛擬支持bean,然後創建一個測試的一個簡單的事情JSF配置文件將這些bean映射到.jspx文件。虛擬bean當然不會觸及任何業務邏輯或後端服務 - 它們只是簡單的數據集,在測試中很容易驗證。

創建一個ant腳本以替換您的虛擬後備bean和測試配置文件。運行你的測試。如果你不想像HTTPUnit一樣繁重,並且如果你在你的應用中使用Spring,請看this blog post,這是一個很好的方法來模擬一個完整的web上下文而無需web服務器。您的測試可能需要嗅探原始HTML輸出以驗證結果。這將會非常棘手,因爲IceFaces喜歡挖掘DIV ID和DOM樹中其他相關的部分,您可能想要嗅探它們。 (這可能就是爲什麼很少有JSF開發人員嘗試單元測試JSF輸出的原因。)

一旦您的測試通過驗證,將常規bean和配置文件交換回應用程序。

瞧!您只是單元測試了您的JSF組件。

請注意,交換bean和配置文件的整個業務是凌亂的。如果IceFaces使用Spring將支持bean與JSF頁面進行匹配,那麼將會更加容易 - 那麼您可以簡單地在application.xml中使用相關測試類定義測試bean。但這就是生活。

祝你好運,讓我知道它是如何爲你工作的!

1

這不是你要求的內容,而是JSFUnit(它使用JUnit,Cactus,HtmlUnit和HttpUnit)似乎是在JSF土地上進行測試的一個重要候選人。你有沒有考慮過這個選擇?也許看看JSFUnit Wiki及其Getting Started Guide

請注意,常見問題是報告的一些問題與ICEfaces的,但它很老的(2009年初),情況可能會改變,因爲再(也有在JBoss的庫一些演示項目,如jboss-jsfunit-examples-icefacesicefaces-demo-address因此它可能是值得詢問JSFUnit或IceFaces郵件列表的確切狀態)。

編輯:正如在評論中提到的,OP正在尋找一些不那麼「高級」的東西。也許有一個看看Shale Test Framework

頁岩測試框架提供了模擬 對象庫,再加上基類 創建自己的JUnit TestCase秒。在包裝中提供

Mock對象 org.apache.shale.test.mock爲 以下容器的API:

  • 的JavaServer Faces
  • 的Servlet

免責聲明:阿帕奇頁岩2009年5月搬進Attic (即它已經達到其生命的盡頭),但我不知道任何其他「成熟」的JSF模擬框架,所以我是無論如何提及它(代碼仍然存在)。我會按照這個線程與其他解決方案:)

+0

是的,我看過那個。可悲的是,這對我的需求來說太「高級」了。我想像JSFUnit一樣,單獨測試每個部分而不是整個堆棧。 – Ryan 2009-11-30 00:29:46