2012-03-02 92 views
1

在我們的SmartGWT Web應用程序中,我們將域對象從服務器傳遞到客戶端並返回(通過GWT序列化)。要在DynamicForm或GridList中顯示/編輯客戶端的數據,我們必須將其轉換爲Record(或ListGridRecord),並在編輯回我們的域對象之後。單元測試如何使用SmartGWT類?

我想編寫一個單元測試這種轉換方法,但在JUnit的一個簡單的嘗試失敗,因爲記錄的getAttributesetAttribute方法由JSOHelper.getAttribute/JSOHelper.setAttribute,這是宣佈爲native並實現靜態方法來實現由JSNI在JavaScript中進行編譯,因此只有在編譯爲JavaScript時纔可用於客戶端。

從JUnit使用這些方法時,我們得到一個UnsatisfiedLinkError,因爲本地方法沒有在那裏實現。

任何想法我可以測試這些類嗎?

這些關鍵方法可以通過簡單的HashMap輕鬆實現(如果屬性順序很重要,也可以是LinkedHashMap) - 實際上JavaScript對象就是關於這個的,如果只看數據部分而不是方法。因此,我只是考慮用Java實現而不是JavaScript提供一些選定的SmartGWT類(主要是JSOHelper)的替代實現。

但我真的是第一個有這個問題的人嗎?我是不是很傻,找不到現有的解決方案?

+0

相關(但這裏沒有真正幫助):[GWT:單元測試/模擬JSNI方法的最佳實踐?](http://stackoverflow.com/questions/2543462/gwt-best-practice-for-unit -testing-mocking-jsni-methods) – 2012-03-02 19:09:00

回答

0

如果您在代碼中使用了MVP或MVC模式,只需模擬mockito之類的視圖代碼並測試應用程序的所有其餘部分。要測試視圖代碼,您將需要使用類似Selinium的東西我不認爲gwtTestCase可以與smartGWT一起使用,因爲它只是一個圍繞js代碼的gwt包裝。

+0

我們使用MVP,但是我想測試的這個類實際上是視圖的一部分(或者可以被認爲是這樣)。它只涉及純數據類(無GUI),但涉及由JavaScript對象表示的數據類,這是此處的問題。 – 2012-03-02 22:44:57

+0

也許你可以編寫未解決方法的java版本。 – Deanna 2012-03-03 00:15:31

+0

是的,那是我的想法,但我希望別人已經做到了,因此我的問題在這裏。 – 2012-03-03 01:41:37