【问题标题】:What is the best way to write a test case for RESTLET web services?为 RESTLET Web 服务编写测试用例的最佳方法是什么?
【发布时间】:2009-05-26 17:22:35
【问题描述】:

我有一个用 Restlet 库实现的 JAX-RS Web 服务,现在我想测试它。为此,我想在我的测试中托管此服务,方法是使用模拟服务对其进行预初始化。

托管此类服务和执行测试调用的最佳方式是什么?

@Path("/srv")
public class MyService
{
   @GET
   public void action(@Context UriInfo uri)
   { ... }
}

@Test
public void myTest()
{
   MyService service = new MyService();
   service.setSomething(...);

   // How do I host it?

   // How do I call it?
}

【问题讨论】:

    标签: java junit restlet jax-rs testng


    【解决方案1】:

    @见http://www.restlet.org/documentation/1.1/firstSteps#part04

    您应该能够以嵌入式方式运行 Restlet 服务并使用 apache HttpClient 调用方法。我已经做到了,而且很简单。

    【讨论】:

      【解决方案2】:

      Restlet 让您可以在各种服务器“连接器”上运行 Web 服务,并且从一台服务器切换到另一台服务器非常容易。我们通常在 Sun Glassfish Java EE 应用服务器集群上运行我们的 Web 服务,但为了测试它们,我们使用与 Simple HTTP Server 链接的连接器将 Web 服务作为独立应用程序运行。还有用于 AsyncWeb、Jetty、Grizzly 和内部 HTTP 服务器的服务器连接器。

      在客户端,您应该考虑 Restlet 客户端库。它非常简洁,旨在与 Restlet 服务器很好地结合。我们使用 Apache HTTP 客户端连接器。

      为了测试,我们创建了 Fetcher 类。这是使用 Restlet 客户端 API 实现的。要使用它,您几乎可以调用 fetch() 方法:

      DTO person = fetch("/employee/1234");
      DTO department = fetch("/department/" + person.getDepartment());
      

      Fetch() 将给定的资源名称附加到 Web 服务的基本 URI(例如“http://localhost:8182”),使用 Restlet 客户端 API 获取 XML 表示,然后将获取的 XML 反序列化为数据传输对象( POJO)。

      您可以看到,这确实使单元测试变得非常容易。在单元测试之前,您在 Simple 或 Jetty 等独立服务器上启动 Web 服务。在单元测试期间,您使用 Fetcher 获取 DTO、DOM 树、json.org 对象或其他任何内容,然后将测试断言应用于返回的内容。如果需要更详细的测试,可以直接使用Restlet客户端代码。

      【讨论】:

      • 我的问题的重点是弄清楚如何在进程内部初始化 Web 服务/组件。我不想/不能在远程服务器上运行它。在将服务公开为 Web 服务之前,需要使用模拟实例初始化服务。有没有办法将类/组件的实例公开为服务?
      猜你喜欢
      • 1970-01-01
      • 2020-11-19
      • 2012-03-11
      • 2010-10-11
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多