2009-05-26 122 views
7

我有一个使用Restlet库实现的JAX-RS web服务,现在我想测试它。为了做到这一点,我想通过模拟服务预初始化来在我的测试中托管此服务。为RESTLET 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? 
} 

回答

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()); 

取()大头针给定的资源名称上的Web服务的基础URI(说“http://localhost:8182”),使用的Restlet客户端API来获取XML表示,然后将获取的XML反序列化为数据传输对象(PO​​JO)。

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

+1

我的问题的关键是要弄清楚如何初始化一个Web服务/组件内部的过程。我不想/不能在远程服务器上运行它。在作为Web服务公开之前,需要使用模拟实例来初始化服务。有没有办法将类/组件的INSTANCE作为服务公开? – IgorM 2009-07-08 04:11:12

相关问题