GWT SyncProxy测试

时间:2012-09-26 18:36:53

标签: gwt testing junit rpc

我使用标准GWT示例创建一个新的Web应用程序项目。然后我想用以下测试类测试greetingserviceimpl。我不知道问题出在哪里。我还上传了项目:http://ul.to/1pz1989y

public class RPCTest extends GWTTestCase {

@Override
public String getModuleName() {
    // TODO Auto-generated method stub
    return "de.GreetingTest";
}

public void testGreetingAsync() {
    GreetingServiceAsync rpcService =  (GreetingServiceAsync) SyncProxy.newProxyInstance(GreetingServiceAsync.class,"http://127.0.0.1:8888/GreetingTest.html?gwt.codesvr=127.0.0.1:9997");
    rpcService.greetServer("GWT User", new AsyncCallback<String>() {
        public void onFailure(Throwable ex) {                
            ex.printStackTrace();
            fail(ex.getMessage());              
        }
        public void onSuccess(String result) {
            assertNotNull(result);               
            finishTest();//
        }
    });
    delayTestFinish(1000);
}

}

验证新编译的单位    第一次通过时忽略了1个带编译错误的单元。
使用-strict或-logLevel进行编译设置为TRACE或DEBUG以查看所有错误。
   [错误]第17行:没有源代码可用于com.gdevelop.gwt.syncrpc.SyncProxy类型;你忘了继承一个必需的模块吗?
[错误]无法找到类型'de.client.RPCTest'
   [错误]提示:以前的编译器错误可能导致此类型不可用    [错误]提示:检查模块中的继承链;它可能不是继承所需的模块,或者模块可能没有正确添加其源路径条目

1 个答案:

答案 0 :(得分:0)

您的rpc服务是异步的 - 它在testGreetingAsync方法返回时尚未完成。 GWTTestCase(但你正在扩展TestCase,你应该改变这个)虽然支持这个 - 在方法结束时调用delayTestFinish来表明测试是异步的。然后,一旦成功,请致电finishTest

public class RPCtest extends GWTTestCase {
    public void testGreetingAsync() {
        GreetingServiceAsync rpcService =  (GreetingServiceAsync) SyncProxy.newProxyInstance(GreetingServiceAsync.class,"http://127.0.0.1:8888/Tests.html?gwt.codesvr=127.0.0.1:9997");
        rpcService.greetServer("GWT User", new AsyncCallback() {
            public void onFailure(Throwable ex) {
                //indicate that a failure has occured
                ex.printStackTrace();
                fail(ex.getMessage());//something like this               
            }
            public void onSuccess(Object result) {
                //verify the value...
                assertNotNull(result);

                //Then, once sure the value is good, finish the test
                finishTest();//This tells GWTTestCase that the async part is done
            }
        });
        delayTestFinish(1000);//1000 means 'delay for 1 second, after that time out'
    }
}

修改更新的问题:

  

在模块'de.GreetingTest'中找不到测试类'de.RPCTest';没有看到该类型的编译单元

就像您的常规GWT代码必须在client包中一样,您的GWTTestCase代码也必须 - 这也可以作为JavaScript运行,因此可以像在浏览器中一样对其进行正确测试。根据错误,我猜你的EntryPoint等在de.client - 这个测试也应该在那里。