我使用标准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'
[错误]提示:以前的编译器错误可能导致此类型不可用
[错误]提示:检查模块中的继承链;它可能不是继承所需的模块,或者模块可能没有正确添加其源路径条目
答案 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
- 这个测试也应该在那里。