2


这里有人使用 GWT SyncProxy 吗?
我尝试测试一个异步rpc,但是onFailure和onSuccess下的代码没有测试。不幸的是,没有错误日志,但也许有人可以帮助我。该示例来自此页面:http ://code.google.com/p/gwt-syncproxy/

编辑:
我希望测试失败。所以我添加了'assertNull(result);'。奇怪的是控制台给出的结果首先是“异步好”,然后是“异步坏”。所以函数运行了两次?!Junit 给出了绿色的结果。

public class Greeet extends TestCase {
@Test
public void testGreetingServiceAsync() throws Exception {
      GreetingServiceAsync rpcServiceAsync = (GreetingServiceAsync) SyncProxy.newProxyInstance(
        GreetingServiceAsync.class, 
        "http://127.0.0.1:8888/greettest/", "greet");

      rpcServiceAsync.greetServer("SyncProxy", new AsyncCallback<String>() {
        public void onFailure(Throwable caught) {
          System.out.println("Async bad " );
        }
        public void onSuccess(String result) {
          System.out.println("Async good " );
          assertNull(result);
        }
      });

      Thread.sleep(100); // configure a sleep time similar to the time spend by the request
}
}
4

1 回答 1

1

为了使用 gwt-syncproxy 进行测试:

  1. 你必须启动 gwt 服务器:'mvn gwt:run' 如果你使用的是 maven,或者'project -> run as -> web app' 在你使用 eclipse 的情况下。
  2. 您必须设置服务的 url,通常是 'http://127.0.0.1:8888/your_module'。请注意,在您的示例中,您使用的是应用程序 html 的 url。
  3. 如果您测试异步,则必须等到调用完成,因此在您的情况下,您需要在方法结束时使用 Thread.sleep(sometime) 。
  4. 如果您测试同步,则不需要睡眠。

这是两个示例测试用例:

同步测试

public void testGreetingServiceSync() throws Exception {
  GreetingService rpcService = (GreetingService)SyncProxy.newProxyInstance(
     GreetingService.class, 
    "http://127.0.0.1:8888/rpcsample/", "greet");
  String s = rpcService.greetServer("SyncProxy");
  System.out.println("Sync good " + s);
}

异步测试

boolean finishOk = false;
public void testGreetingServiceAsync() throws Exception {
  GreetingServiceAsync rpcServiceAsync = (GreetingServiceAsync) SyncProxy.newProxyInstance(
    GreetingServiceAsync.class, 
    "http://127.0.0.1:8888/rpcsample/", "greet");

  finishOk = false;
  rpcServiceAsync.greetServer("SyncProxy", new AsyncCallback<String>() {
    public void onFailure(Throwable caught) {
      caught.printStackTrace();
    }

    public void onSuccess(String result) {
      assertNull(result);
      finishOk = true;
    }
  });

  Thread.sleep(100);
  assertTrue("A timeout or error happenned in onSuccess", finishOk);
}
于 2012-10-01T12:20:30.920 回答