In my experience, using of mocking frameworks for testing of Async calls is 
not so good and tests are becoming un-readable at some point of time. In our 
app we are using Command Pattern to send different requests 
(Action/Response) and here is our helper class that we are using for 
testing: 

public class FakeRpcService implements RpcServiceAsync {

  public Action<?> lastAction;
  public AsyncCallback<?> lastCallback;

  public <T extends Response> void execute(Action<T> action, 
AsyncCallback<T> async) {
    lastAction = action;
    lastCallback = async;
  }

  public <T> T lastAction() {
    return (T) lastAction;
  }

  public void responsesWith(Response response) {
    // SMELL private members of simple object are referencing template 
members?
    ((AsyncCallback<Response>) lastCallback).onSuccess(response);
  }

  public void failsWith(RuntimeException e) {
    ((AsyncCallback<Response>) lastCallback).onFailure(e);
  }
}

so our tests now are looking like:

 @Test
  public void exportSelectedInvoices() {
    List<InvoiceDto> invoices = 
Lists.newArrayList(createInvoice("1",PaymentType.CASH));

    // filter button was clicked
    presenter.onReportRequested();
    service.responsesWith(new GetInvoicesPeriodReportResponse(invoices));

    presenter.onExportSelectedInvoices(new HashSet<InvoiceDto>());

    GenerateAjurExportAction action = service.lastAction();
    assertThat("the one selected invoice was not sent for 
export?",action.getInvoices(), is(equalTo(invoices)));

    service.responsesWith(new GenerateAjurExportResponse("test test"));
    assertThat("export response was not 
displayed?",display.exportResponse,is(equalTo("test test")));
  }

Hope this will help you figure out what's the best choice for you.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/OTxCnyHee14J.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to