2


GWT SyncProxy を使用した経験のある人はいますか?
非同期 rpc をテストしようとしましたが、onFailure と onSuccess の下のコードはテストされていません。残念ながらエラーログはありませんが、誰かが私を助けることができるかもしれません. 例はこのページからのものです: http://code.google.com/p/gwt-syncproxy/

編集:
テストが失敗することを望みます。そこで、「assertNull(result);」を追加しました。奇妙なことは、コンソールが結果として最初に「非同期良好」を示し、その後「非同期不良」を示すことです。つまり、関数は 2 回実行されていますか?! そして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 サーバーを起動する必要があります: Maven を使用している場合は 'mvn gwt:run'、Eclipse の場合は 'project -> run as -> web app' です。
  2. サービスの URL を設定する必要があります。通常は「http://127.0.0.1:8888/your_module」です。この例では、アプリケーション html の URL を使用していることに注意してください。
  3. 非同期をテストする場合は、呼び出しが完了するまで待つ必要があるため、メソッドの最後に Thread.sleep(sometime) が必要です。
  4. 同期をテストする場合、スリープは必要ありません。

これは 2 つのテスト ケースの例です。

同期テスト

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 に答える