2013-01-07 90 views
0

我已經寫了GWTTestCase這樣以後不叫:GWT RPC回調調用GWTTestCase

public void testClickButton() { 
    SampleView view = new SampleView(); 
    RootPanel.get().add(view); 
    view.textBox.setText("Saeed Zarinfam"); 

    assertEquals("", view.label.getText()); 

//  ButtonElement.as(view.button.getElement()).click(); 
    view.button.getElement().<ButtonElement>cast().click(); 

    assertEquals("Bean \"OCTO\" has been created", view.label.getText()); 
} 

當我運行這個測試將它連接到我的servlet(我加在我的servlet一些日誌),但RPC回調並不在我的SampleView打電話,說的JUnit:

expected: <Bean "OCTO" has been created>, actual: <> 

這是我在按鈕單擊處理程序回調:

@UiHandler("button") 
void onClick(ClickEvent e) { 

    labelTest.setText("click button"); 

    AsyncCallback<FooBean> callback = new AsyncCallback<FooBean>() { 
     public void onFailure(Throwable caught) { 
      // Show the RPC error message to the user 
      labelTest.setText("call fail"); 
      label.setText("Failure : " + caught.getMessage()); 
     } 

     public void onSuccess(FooBean result) { 
      labelTest.setText("call success"); 
      label.setText("Bean \"" + result.getName() + "\" has been created"); 
     } 
    }; 

    // Make the call. Control flow will continue immediately and later 
    // 'callback' will be invoked when the RPC completes. 
    service.createBean("OCTO", callback); 


} 

爲什麼在這種情況下GWT rpc回調不會調用?

回答

1

即使在GWTTestCase中,RPC調用也是異步的。您必須致電delayTestFinish()告訴跑步者該測試是異步的,並在未來的某個時間點撥打finish(),告訴其已完成並確定(否則您將有超時)。

對於您的情況,由於調用代碼無法知道RPC調用何時完成,因此您只能粗略猜測需要多少時間,並使用Timer
如果你問我,更好地重構你的代碼以使它更具可測性(注意:Selenium的工作原理大致相同:每秒檢查一次條件,直到超時,http://seleniumhq.org/docs/02_selenium_ide.jsp#the-waitfor-commands-in-ajax-applications,就像Timer那樣,你會重新計劃到N次,如果條件不滿足)

https://developers.google.com/web-toolkit/doc/latest/DevGuideTesting#DevGuideAsynchronousTesting

+0

牛逼漢克·托馬斯,我有一個問題,我已經測試GWT測試-utils有關的LIB我的情況,它與GWT RPC不錯,但我的GWT工作UI是複雜的,它不能解析我的* .ui.xml文件,然後我選擇GWTTestCase,我選擇正確的方式? –

+1

我發現gwt-test-utils的方式太冒險了。對於端到端測試,我想我寧願使用Selenium(或類似的方法),並且僅使用GWTTestCase /主要用於單元測試(小部件或其他基於JSNI的東西)。但實際上,我在測試應用程序方面相當不利(在測試libs/API方面效果更好)。 –