0

我想用 cookie 对 GWT 项目进行单元测试。我目前正在对代码的身份验证部分进行单元测试。所以我需要能够将 sessionID 存储为 cookie 并在以后检索它。我目前正在使用带有 SyncProxy 的普通 TestCase(不是 GWTTestCase)来测试异步行为。

问题是 SyncProxy 和 Unit Test 都不能像浏览器一样运行并支持 cookie 的管理。有什么想法可以测试吗?

为了完整起见,在尝试测试时,我收到此错误:

java.lang.UnsatisfiedLinkError: com.google.gwt.user.client.Cookies.uriEncode(Ljava/lang/String;)Ljava/lang/String;
    at com.google.gwt.user.client.Cookies.uriEncode(Native Method)
    at com.google.gwt.user.client.Cookies.setCookie(Cookies.java:177)
    at com.google.gwt.user.client.Cookies.setCookie(Cookies.java:158)
    at com.projects.client.Authentication.setSesssionCookie(Authentication.java:64)
    at com.projects.client.Authentication$signInCredentialsHandler.onSuccess(Authentication.java:96)
    at com.projects.client.Authentication$signInCredentialsHandler.onSuccess(Authentication.java:1)
    at com.gdevelop.gwt.syncrpc.RemoteServiceInvocationHandler$1.run(RemoteServiceInvocationHandler.java:175)
4

3 回答 3

1

Cookie 单元测试方法

1) Cookie 的 GWT 单元测试http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/test/com/google/gwt/user/client/CookieTest.java

2)目前还不清楚为什么需要测试已经过单元测试的 GWT 代码。如果您的场景是集成测试,那么基于 Selenium 的浏览器测试用例是最好的选择。

3) 使用模拟库或测试实用程序,例如http://code.google.com/p/gwt-test-utils/

我不会推荐第三种方法。如果您的单元测试变得复杂,那么您的代码就是复杂的或者场景是错误的。

于 2013-01-03T13:17:19.773 回答
1

正如 SSR 所说,cookies 已经测试过了,为什么还需要再次测试呢??我相信您需要一个cookie 字符串,以便您可以对您的方法进行单元测试。如果是这种情况,请尝试模拟该方法并返回您想要的任何字符串,或者您可以忽略方法调用

于 2013-01-03T13:20:32.660 回答
0

我也在做同样的事情,这段代码在我的环境中工作。您可以从 cookie 中获取 sessionid。

CookieManager cookiemanager = LoginUtils.loginFormBasedJ2EE("hostname", "username", "password");

                    SyncProxy.setBaseURL("baseURI");



                    StandardDispatchService rpcService =  SyncProxy.createProxy(StandardDispatchService.class,
                            new ProxySettings().setCookieManager(cookiemanager));

                    System.out.println(cookiemanager.getCookieStore().getCookies().get(0));
                    String JSESSIONID = cookiemanager.getCookieStore().getCookies().get(0).getValue();

                    rpcService.execute(new XXXAction(XXX,XX));
于 2015-04-02T09:01:37.453 回答