2013-01-07 89 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方面效果更好)。 –