当前位置:  开发笔记 > 编程语言 > 正文

单元测试JAX-RS Web服务?

如何解决《单元测试JAX-RSWeb服务?》经验,为你挑选了5个好方法。

我目前正在寻找为基于Web服务的JAX-RS(基于REST的Web服务的Java API)创建自动化测试的方法.

我基本上需要一种方法来发送它某些输入并验证我得到了预期的响应.我宁愿通过JUnit这样做,但我不确定如何实现.

您使用什么方法来测试您的Web服务?

更新:正如entzik指出的那样,将Web服务与业务逻辑分离后,我可以对业务逻辑进行单元测试.但是,我还想测试正确的HTTP状态代码等.



1> James Strach..:

Jersey提供了一个出色的RESTful客户端API,使编写单元测试变得非常简单.请参阅Jersey附带的示例中的单元测试.如果您对测试用例感兴趣,我们使用此方法测试Apache Camel中的REST支持


re:现在链接不好你可以找到显示单元测试的球衣/样本中提到的例子,基本上是通过使用球衣的消费者来消耗网络资源.http://download.java.net/maven/2/com/sun/jersey/samples/bookstore/1.1.5-ea-SNAPSHOT
糟糕的链接再次 - 记得更新?
这个项目在GitHub上,在src/test文件夹中找到测试:https://github.com/jersey/jersey/tree/master/examples/bookstore-webapp
我对此表示怀疑,但我感到非常有趣的是,Jersey总是进入JAX-RS对话,在某些情况下(不幸的是,准确地说,WebSphere)它不可用,并且提供了所有可接受答案的99%在Stack Overflow上无效。

2> Johan..:

您可以尝试使用REST Assured,这样可以非常简单地测试REST服务并验证Java中的响应(使用JUnit或TestNG).



3> Fırat KÜÇÜK..:

正如詹姆斯所说; Jersey 有内置的测试框架.一个简单的hello world示例可以是这样的:

用于maven集成的pom.xml.当你跑步mvn test.框架开始一个灰熊容器.您可以通过更改依赖项来使用jetty或tomcat.

...

  
    org.glassfish.jersey.containers
    jersey-container-servlet
    2.16
  

  
    org.glassfish.jersey.test-framework
    jersey-test-framework-core
    2.16
    test
  

  
    org.glassfish.jersey.test-framework.providers
    jersey-test-framework-provider-grizzly2
    2.16
    test
  

...

ExampleApp.java

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
public class ExampleApp extends Application {

}

HelloWorld.java

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/")
public final class HelloWorld {

    @GET
    @Path("/hello")
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHelloWorld() {

        return "Hello World!";
    }
}

HelloWorldTest.java

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import javax.ws.rs.core.Application;
import static org.junit.Assert.assertEquals;

public class HelloWorldTest extends JerseyTest {

    @Test
    public void testSayHello() {

        final String hello = target("hello").request().get(String.class);

        assertEquals("Hello World!", hello);
    }

    @Override
    protected Application configure() {

        return new ResourceConfig(HelloWorld.class);
    }
}

您可以查看此示例应用程序.



4> entzik..:

您可能编写了一些实现业务逻辑的Java代码,然后为它生成了Web服务端点.

一件重要的事情是独立测试您的业务逻辑.由于它是纯Java代码,因此您可以使用常规JUnit测试来实现.

现在,由于Web服务部分只是一个终点,您要确保生成的管道(存根等)与您的Java代码同步.您可以通过编写调用生成的Web服务Java客户端的JUnit测试来实现.这将告诉您何时更改Java签名而不更新Web服务的内容.

如果您的构建系统在每次构建时自动生成Web服务管道,则可能没有必要测试端点(假设它们都已正确生成).取决于你的偏执程度.



5> 小智..:

虽然从发布问题之日起为时已晚,但认为这可能对其他有类似问题的人有用.Jersey带有一个名为Jersey Test Framework的测试框架,允许您测试RESTful Web服务,包括响应状态代码.您可以使用它在轻量级容器(如Grizzly,HTTPServer和/或EmbeddedGlassFish)上运行测试.此外,该框架可用于在常规Web容器(如GlassFish或Tomcat)上运行测试.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有