在 GWT 上进行 RPC 单元测试时遇到问题

发布于 2024-07-24 02:07:11 字数 4601 浏览 7 评论 0原文

我正在尝试使用 GWT 进行 RPC 测试。 我正在使用此处提到的默认 StockWatcher 项目,我下载该项目,我导入它,一切正常。

然后,我在 StockWatcher 项目中运行 junitcreator:

/Users/stephen/Work/gwt/gwt-mac-1.6.4/junitCreator -junit   /Users/stephen/Applications/eclipse/plugins/org.junit_3.8.2.v20080602-1318/junit.jar -module stockwatcher -eclipse StockWatcher com.google.gwt.sample.stockwatcher.StockWatcherTest

这会在相应的测试目录中创建 StockWatcherTest.java,并提供一些托管和 Web 模式启动文件。

然后,我还将 junit.jar 添加到该项目的类路径中。

然后,我修改 StockWatcherTest.java 以测试是否能够向服务器发出异步请求。 一切看起来都很好,但是当我尝试在托管模式下运行 StockWatcherTest.java 时,出现以下错误:

在端口 0 HTTP 上启动 HTTP

监听端口49569

开发 shell servlet 收到了 在模块中请求“问候” 'com.google.gwt.sample.stockwatcher.StockWatcher.JUnit.gwt.xml' [警告] 找不到资源:问候; (可能是文件丢失了 公共路径或标签 模块配置错误 com.google.gwt.sample.stockwatcher.StockWatcher.JUnit.gwt.xml ?) com.google.gwt.user.client.rpc.StatusCodeException: 在以下位置找不到资源“问候” 模块的公共路径 'com.google.gwt.sample.stockwatcher.StockWatcher.JUnit'

这是我的 StockWatcherTest.java 类

package com.google.gwt.sample.stockwatcher.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * GWT JUnit tests must extend GWTTestCase.
 */
public class StockWatcherTest extends GWTTestCase {

  /**
   * Must refer to a valid module that sources this class.
   */
  public String getModuleName() {
    return "com.google.gwt.sample.stockwatcher.StockWatcher";
  }

  /**
   * Add as many tests as you like.
   */
  public void testSimple() {
      GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
      greetingService.greetServer("Bob",
                new AsyncCallback<String>() {
                    public void onFailure(Throwable caught) {
                        // Show the RPC error message to the user
                        System.out.println(caught);
                        fail("big time failure");
                        finishTest();
                    }

                    public void onSuccess(String result) {
                        System.out.println("success, biatch");
                        assertTrue(true);
                    }
                });
      delayTestFinish(1000);
  }

}

这是 com/google/gwt/sample/stockwatcher/StockWatcher.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.2//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.6.2/distro-source/core/src/gwt-module.dtd">
<module rename-to='stockwatcher'>
  <!-- Inherit the core Web Toolkit stuff.                        -->
  <inherits name='com.google.gwt.user.User'/>

  <!-- Inherit the default GWT style sheet.  You can change       -->
  <!-- the theme of your GWT application by uncommenting          -->
  <!-- any one of the following lines.                            -->
  <inherits name='com.google.gwt.user.theme.standard.Standard'/>
  <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
  <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->

  <!-- Other module inherits                                      -->

  <!-- Specify the app entry point class.                         -->
  <entry-point class='com.google.gwt.sample.stockwatcher.client.StockWatcher'/>
</module>

这是我生成的战争中的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <!-- Default page to serve -->
  <welcome-file-list>
    <welcome-file>StockWatcher.html</welcome-file>
  </welcome-file-list>

  <!-- Servlets -->
  <servlet>
    <servlet-name>greetServlet</servlet-name>
    <servlet-class>com.google.gwt.sample.stockwatcher.server.GreetingServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>greetServlet</servlet-name>
    <url-pattern>/stockwatcher/greet</url-pattern>
  </servlet-mapping>

</web-app>

所以我究竟做错了什么? 任何帮助表示赞赏。 谢谢。

I am trying to get RPC testing using GWT. I am using the default StockWatcher project that is mentioned here, I download the project, I import it, everything works fine.

I then run junitcreator in the StockWatcher project:

/Users/stephen/Work/gwt/gwt-mac-1.6.4/junitCreator -junit   /Users/stephen/Applications/eclipse/plugins/org.junit_3.8.2.v20080602-1318/junit.jar -module stockwatcher -eclipse StockWatcher com.google.gwt.sample.stockwatcher.StockWatcherTest

this creates the StockWatcherTest.java in the appropriate test directory, and gives me some hosted and web mode launch files.

I then also added junit.jar to the classpath for this project.

I then modify StockWatcherTest.java to test whether I am capable of making a asynchronous request to the server. Everything looks fine, but when I try to run StockWatcherTest.java in hosted mode, I get the following error:

Starting HTTP on port 0 HTTP

listening on port 49569

The development shell servlet received a
request for 'greet' in module
'com.google.gwt.sample.stockwatcher.StockWatcher.JUnit.gwt.xml'
[WARN] Resource not found: greet;
(could a file be missing from the
public path or a tag
misconfigured in module
com.google.gwt.sample.stockwatcher.StockWatcher.JUnit.gwt.xml
?)
com.google.gwt.user.client.rpc.StatusCodeException:
Cannot find resource 'greet' in the
public path of module
'com.google.gwt.sample.stockwatcher.StockWatcher.JUnit'

Here is my StockWatcherTest.java class

package com.google.gwt.sample.stockwatcher.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * GWT JUnit tests must extend GWTTestCase.
 */
public class StockWatcherTest extends GWTTestCase {

  /**
   * Must refer to a valid module that sources this class.
   */
  public String getModuleName() {
    return "com.google.gwt.sample.stockwatcher.StockWatcher";
  }

  /**
   * Add as many tests as you like.
   */
  public void testSimple() {
      GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
      greetingService.greetServer("Bob",
                new AsyncCallback<String>() {
                    public void onFailure(Throwable caught) {
                        // Show the RPC error message to the user
                        System.out.println(caught);
                        fail("big time failure");
                        finishTest();
                    }

                    public void onSuccess(String result) {
                        System.out.println("success, biatch");
                        assertTrue(true);
                    }
                });
      delayTestFinish(1000);
  }

}

Here is com/google/gwt/sample/stockwatcher/StockWatcher.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.2//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.6.2/distro-source/core/src/gwt-module.dtd">
<module rename-to='stockwatcher'>
  <!-- Inherit the core Web Toolkit stuff.                        -->
  <inherits name='com.google.gwt.user.User'/>

  <!-- Inherit the default GWT style sheet.  You can change       -->
  <!-- the theme of your GWT application by uncommenting          -->
  <!-- any one of the following lines.                            -->
  <inherits name='com.google.gwt.user.theme.standard.Standard'/>
  <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
  <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->

  <!-- Other module inherits                                      -->

  <!-- Specify the app entry point class.                         -->
  <entry-point class='com.google.gwt.sample.stockwatcher.client.StockWatcher'/>
</module>

and here is web.xml in my generated war

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <!-- Default page to serve -->
  <welcome-file-list>
    <welcome-file>StockWatcher.html</welcome-file>
  </welcome-file-list>

  <!-- Servlets -->
  <servlet>
    <servlet-name>greetServlet</servlet-name>
    <servlet-class>com.google.gwt.sample.stockwatcher.server.GreetingServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>greetServlet</servlet-name>
    <url-pattern>/stockwatcher/greet</url-pattern>
  </servlet-mapping>

</web-app>

So what am I doing wrong? Any help is appreciated. Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最单纯的乌龟 2024-07-31 02:07:11

1-您需要添加“finishTest();” 在“onSuccess”方法的末尾。

2-并解决您遇到的异常:在 StockWatcher.gwt.xml 中添加 servletgreet 的路径。

servlet 路径='/greet' 类='com.google.gwt.sample.stockwatcher.server.GreetingServiceImpl'/

1-you need to add "finishTest();" at the end of the "onSuccess" method.

2-And to resolve the exeption you got : add in your StockWatcher.gwt.xml the path to your servlet greet.

servlet path='/greet' class='com.google.gwt.sample.stockwatcher.server.GreetingServiceImpl'/

岁月静好 2024-07-31 02:07:11

另一个解决方案是使用 GWT SyncProxy(支持同步和异步)在 JRE 中测试 GWT RPC 服务

请参阅 http://www.gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/ 了解详细信息

Another solution is using GWT SyncProxy (support both sync & async) to test GWT RPC services in JRE

See the post at http://www.gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/ for details

清欢 2024-07-31 02:07:11

我为股票观察者做了一些简单的测试。 您可以在以下位置查看它们:http://tayek.com/StockWatcher.zip

i made some simple tests for the stock watcher. you can see them at: http://tayek.com/StockWatcher.zip

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文