RESTLET web服务编写测试用例的最佳方法是什么?

8

我有一个使用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?
}
2个回答

1

0

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

在客户端方面,你应该考虑使用 Restlet 客户端库。它非常简洁,并且设计得与 Restlet 服务器很好地配合。我们使用 Apache HTTP Client 连接器。

对于测试,我们创建了 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)。

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


2
我的问题的核心是如何在进程内初始化Web服务/组件。我不想/无法在远程服务器上运行它。在将其公开为Web服务之前,需要使用模拟实例初始化服务。是否有一种方法将类/组件的实例公开为服务? - IgorM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接