2009-01-04 105 views

回答

14

如果您希望單獨測試GWT小部件,則沒有多少選項。您可以使用GWTTestCase實例化您的小部件並通過其API測試它,這是Google爲GWT小部件本身所做的工作:Source for RadioButtonTest

但是,事件觸發機制在GWTTestCases中不起作用,這意味着您可以不會像編程式地點擊一個按鈕,並期望在偵聽器上調用一些onClick()回調方法。即使不是不可能獲得底層DOM也很困難,所以它可能不是測試低級別HTML發佈代碼的最佳工具。

這聽起來像你正在遵循所有正確的步驟; Rob的文章詳細介紹瞭如何使用Model-View-Presenter(MVP)設計模式編寫可測試代碼。您離開視圖層的邏輯越多越好。如果這不可行,請使用像Selenium這樣的工具來創建動態UI行爲的集中測試。

我遵循類似的策略 - 在小部件中使用最少代碼的MVP。在一些情況下,我編寫了一些代碼來封裝Grid類,所以我能夠在GWTTestCase中實例化組件,將它傳遞給Grid,在組件上調用一些方法,並檢查Grid的狀態。我寫了一篇關於Test-First GWT的更好的軟件的文章,你可以閱讀on my blog

如果您正在測試使用非UI GWT類(如URL編碼或字典)的代碼,則需要使用GWTTestCase,否則請遵循類似的包裝策略,直到代碼太簡單而無法破解。然後使用像Selenium這樣的工具進行集成測試,或者使用一些有針對性的GWTTestCases來測試您是否正確使用庫 - 正如J.B. Rainsberger所說,「不要測試框架!」

4

什麼爲我工作:(在視圖或控制器例如沒有業務邏輯;控制器只翻譯查看事件到方法的模型調用)

使用經典模型/視圖/控制器。

將模型和控制器代碼從GWT視圖窗口小部件和任何其他依賴於GWT並且不能在普通的舊式JVM中實例化的類中分離出來。然後您可以使用良好的舊JUnit測試它們。

編寫端到端測試以通過GUI測試系統,以確保模型和控制器正確連接到視圖。我們發現,部署和啓動應用程序的速度更快,然後通過由WebDriver從JUnit控制的瀏覽器與應用程序進行交互,而不是使用GWTTestCase!

使用JMock測試如下異步調用:http://www.jmock.org/gwt.html

+0

只需要我2分錢就可以運行我在Eclipse中使用JMock的一些GWT JUnit測試:我需要將gwt-dev.jar添加到某些使用JMock的特定JUnit測試類的類路徑中;在這樣做之前,這樣的類有這個錯誤: java.lang.NoClassDefFoundError:com/google/gwt/core/shared/GWTBridge – cellepo 2014-01-20 21:00:02

8

讀取作爲alernative,你應該嘗試gwt-test-utils,它設法在一個獨立的JVM上運行GWT的客戶端代碼,並提供了一些功能來嘲笑你想要的任何東西(組件,RPC服務等..)

+0

使用gwt-test-utils試過。但它給:java.lang.RuntimeException:加載JavaScriptObject子類和Patcher實例時出錯..任何想法 – MountainRock 2011-03-31 10:09:32

相關問題