Testing GWT RPC services
Posted in GWT on January 10th, 2010 – 59 CommentsYou may know that testing with GWTTestCase are very slow. And there are many posts about testing GWT applications without using GWTTestCase.
However, it is still hard to test our RPC remote services. That is the reason I decided to develop SyncProxy which can run directly from pure Java (non JSNI) code.
Simple Test case
For example, we have an helloApp application and we want to test our GreetingService
@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
String greetServer(String name);
}
Assume the server side of application is running (whether in DevMode or deployed to an web server) and the servlet URL is configured at http://localhost/helloApp/greet
The test case
public class GreetingServiceTest extends TestCase{
private static GreetingService rpcService =
SyncProxy.newProxyInstance(GreetingService.class,
"http://localhost/helloApp", "greet");
public void testGreeting() {
String result = rpcService.greetServer("SyncProxy");
assertTrue((result != null) && (result.startsWith("Hello, SyncProxy")))
}
}
Explanation
SyncProxy.newProxyInstance() method requires a service interface class, a base URL and a relative servlet path.
SyncProxy will search for RPC policy files (*.gwt.rpc files) to determine appropriate policy name for the service interface. Thus, we copy gwt.rpc files from war/helloApp directory to our test case classpath.
SyncProxy.newProxyInstance() will return a new proxy instance which implements our GreetingService interface.
Simulating Async
By design SyncProxy is synchronous, e.g it invoke the remote service and wait for the result. However, our GWT logic code invokes the remote service asynchronously. SyncProxy can simulate the ‘Async’ mode too.
GreetingServiceAsync rpcServiceAsync =
SyncProxy.newProxyInstance(GreetingServiceAsync.class,
"http://localhost/helloApp", "greet");
The code is almost the same as section above, except we use the Async version of the remote service interface.
rpcService.greetServer("SyncProxy", new AsyncCallback<String>(){
public void onFailure(Throwable caught) {
...
}
public void onSuccess(String result) {
...
}
});
Download SyncProxy
Get SyncProxy (with source code) at our Downloads page
SyncProxy includes test suite (see the Java source file com.gdevelop.gwt.syncrpc.test.RPCSyncSuite) to test against the standard GTW RPC test.
Updated on 2010/03/03: Version 0.1.1 is released with cookie supports
Updated on 2010/03/13: New post Invoke GWT RPC services deployed on Google App Engine.
Leave a Comment »




