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

时间:2009-05-26 17:22:36

标签: java junit restlet jax-rs testng

我有一个用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 个答案:

答案 0 :(得分:1)

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

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

答案 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反序列化为数据传输对象(PO​​JO)。

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