我有一个用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?
}
答案 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反序列化为数据传输对象(POJO)。
您可以看到这确实使单元测试变得非常简单。在单元测试之前,您可以在Simple或Jetty等独立服务器上启动Web服务。在单元测试期间,您使用Fetcher获取DTO,DOM树,json.org对象或其他任何内容,然后将测试断言应用于返回的内容。如果需要在更详细的级别进行测试,可以直接使用Restlet客户端代码。