2012-09-29 117 views
2


有人在這裏使用GWT SyncProxy的經驗嗎?
我嘗試測試異步rpc,但onFailure和onSuccess下的代碼未經測試。不幸的是,沒有錯誤日誌,但也許有人可以幫助我。這個例子是從這個頁面:http://code.google.com/p/gwt-syncproxy/測試異步rpc

編輯:
我想測試結果失敗。所以我加了'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 
} 
} 

回答

1

爲了使用GWT-syncproxy測試:

  1. 你必須啓動GWT服務器: 'MVN GWT:運行' 如果你正在使用maven或「項目 - >運行爲 - >網絡應用程序「,如果你在日食。
  2. 您必須設置服務的URL,通常爲'http://127.0.0.1:8888/your_module'。請注意,在您的示例中,您正在使用應用程序html的url。
  3. 如果你測試異步,你必須等到通話結束,所以在你的情況下,你需要一個Thread.sleep(某個時間)在你的方法結束。
  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); 
} 
+0

謝謝。但是我已經更新了我的問題,因爲我還有一個奇怪的問題。 – user1701135

+0

是否有任何理由做異步測試?如果你是單元測試你的服務,它應該足以使用異步方法。 –

+0

異步代理實現不會在成功調用期間拋出失敗,因此您必須維護一個標誌以查看測試是否失敗。我更新了我的例子。 –