1

我使用标准 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'
[错误] 提示:以前的编译器错误可能使此类型不可用
[错误] 提示:检查模块的继承链;它可能没有继承所需的模块,或者模块可能没有正确添加其源路径条目

4

1 回答 1

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 运行,因此可以像在浏览器中一样对其进行正确测试。根据错误,我猜你的入口点等在de.client- 这个测试也应该在那里。

于 2012-09-26T23:35:24.537 回答