Ein*_*nar 78 java junit unit-testing web-services jax-rs
我目前正在寻找为基于Web服务的JAX-RS(基于REST的Web服务的Java API)创建自动化测试的方法.
我基本上需要一种方法来发送它某些输入并验证我得到了预期的响应.我宁愿通过JUnit这样做,但我不确定如何实现.
您使用什么方法来测试您的Web服务?
更新:正如entzik指出的那样,将Web服务与业务逻辑分离后,我可以对业务逻辑进行单元测试.但是,我还想测试正确的HTTP状态代码等.
Jam*_*han 35
Jersey提供了一个出色的RESTful客户端API,使编写单元测试变得非常简单.请参阅Jersey附带的示例中的单元测试.如果您对测试用例感兴趣,我们使用此方法测试Apache Camel中的REST支持
Fır*_*ÇÜK 13
正如詹姆斯所说; Jersey 有内置的测试框架.一个简单的hello world示例可以是这样的:
用于maven集成的pom.xml.当你跑步mvn test
.框架开始一个灰熊容器.您可以通过更改依赖项来使用jetty或tomcat.
...
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.16</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework</groupId>
<artifactId>jersey-test-framework-core</artifactId>
<version>2.16</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>2.16</version>
<scope>test</scope>
</dependency>
</dependencies>
...
Run Code Online (Sandbox Code Playgroud)
ExampleApp.java
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class ExampleApp extends Application {
}
Run Code Online (Sandbox Code Playgroud)
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!";
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以查看此示例应用程序.
您可能编写了一些实现业务逻辑的Java代码,然后为它生成了Web服务端点.
一件重要的事情是独立测试您的业务逻辑.由于它是纯Java代码,因此您可以使用常规JUnit测试来实现.
现在,由于Web服务部分只是一个终点,您要确保生成的管道(存根等)与您的Java代码同步.您可以通过编写调用生成的Web服务Java客户端的JUnit测试来实现.这将告诉您何时更改Java签名而不更新Web服务的内容.
如果您的构建系统在每次构建时自动生成Web服务管道,则可能没有必要测试端点(假设它们都已正确生成).取决于你的偏执程度.
小智 6
虽然从发布问题之日起为时已晚,但认为这可能对其他有类似问题的人有用.Jersey带有一个名为Jersey Test Framework的测试框架,允许您测试RESTful Web服务,包括响应状态代码.您可以使用它在轻量级容器(如Grizzly,HTTPServer和/或EmbeddedGlassFish)上运行测试.此外,该框架可用于在常规Web容器(如GlassFish或Tomcat)上运行测试.
归档时间: |
|
查看次数: |
72979 次 |
最近记录: |