如何为 GWT servlet 编写测试?

Posted

技术标签:

【中文标题】如何为 GWT servlet 编写测试?【英文标题】:How to write a test for GWT servlet? 【发布时间】:2011-03-16 16:58:24 【问题描述】:

我有一个 GWT 应用程序,在服务器端有几个 servlet。我想测试这些 servlet(无需使用 Selenium 或任何其他基于 Web 的框架进行 GUI 测试)。或者换句话说,我希望测试模拟 GWT 的客户端。

测试 servlet 的自然挑战是:

    启动网络服务器, 模拟客户端, Servlet 立即返回,将值传递给 AsyncCallback 对象。

到目前为止,我已经能够弄清楚(尽管这还没有经过测试),即: 1.我可以通过扩展GWTTestCase来启动容器 3. 我找到了一个关于asynchronous testing 的谷歌文档,所以可以等待 等待异步回调。谷歌文档也提到了这一点:

服务器端测试

上述测试旨在帮助测试客户端代码。测试用例包装器 GWTTestCase 将启动开发模式会话或 Web 浏览器来测试生成的 javascript。另一方面,服务器端代码在 JVM 中作为本机 Java 运行而无需转换为 JavaScript,因此没有必要使用 GWTTestCase 作为测试的基类来运行服务器端代码的测试。相反,在为应用程序的服务器端代码编写测试时,直接使用 JUnit 的 TestCase 和其他相关类。也就是说,您可能需要 GWTTestCase 和 TestCase 覆盖将在客户端和服务器上使用的代码。

但是没有例子或更深入的解释如何实现这一点。

我还没有弄清楚如何模拟客户端...有什么想法可以做到吗?

或者,如果这不是这样做的方法,还有其他方法吗?我更喜欢使用本机 GWT 类,而不是一些 3rd 方框架来测试 servlet。

谢谢!

【问题讨论】:

【参考方案1】:

如何使用嵌入式 Jetty 实例...无论如何,Jetty 服务器都包含在 GWT SDK 中。因此,只需将 gwt-dev.jar 包含在您的项目中,然后就可以使用服务器端了。模拟客户端是一个完全不同的故事。问题是发生在 GWT 魔术中的 JavaScript 到 Java 序列化/反序列化....

有一个名为 gwt-syncproxy 的项目可以在这里提供帮助: http://code.google.com/p/gwt-syncproxy/

在代码中可能如下所示:

import junit.framework.Assert;

import org.junit.BeforeClass;
import org.junit.Test;

import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;

import com.gdevelop.gwt.syncrpc.SyncProxy;

public class ServletTest 

    private Server _server;

    @BeforeClass
    public void setUp() throws Exception 
        _server = new Server(8080);
        Context root = new Context(_server, "/", Context.SESSIONS);
        root.addServlet(new ServletHolder(new MyServiceImpl()), "/servlet");
        _server.start();
    

    @Test
    public void testMethod1() throws Exception 
        MyService rpcService = (MyService) SyncProxy.newProxyInstance(MyService.class, "http://127.0.0.1:8080/servlet", "testMethod1");

        String result = rpcService.testMethod1();

        Assert.assertTrue(result != null);
    


【讨论】:

以上是关于如何为 GWT servlet 编写测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何为@KafkaListener 编写单元测试?

如何为自定义 XCTest 断言编写自动化测试?

如何为 Python socketserver 请求处理程序编写单元测试?

你如何为 python 模块的 argparse 部分编写测试?

如何为速度模板编写单元测试?

你如何为 getInitialProps 编写 Jest 测试?