Jersey 2.x集成Spring,如何做单元测试

环境:Jersey 2.13 + Spring 3.2.3

还是因为公司的近期的一个项目,后台开发的rest service,该如何测试呢?当然,我们的rest service最终是部署到tomcat里的,所以,一般来说,可以把项目打包后扔到tomcat中跑起来,再通过页面或者客户端代码来调用测试。

这里介绍另一个方法,利用“内存中的容器”来调试,就是我们不用打包并扔到tomcat中,自己在IDE中,用Unit Test的方法来测试。

1. Jersey的测试框架支持的容器很多,这里选用了常用的grizzly2
在项目的pom.xml中,引入依赖:

<dependency>
<groupId>org.glassfish.jersey.test-framework</groupId>
<artifactId>jersey-test-framework-core</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>


2. 写Jersey的Resource文件

@Path("my/jersey")
public class TestResource{
@Autowired
protected SystemManager systemManager; //这由spring注入

@GET
@Path("/test")
public String test(@QueryParam("systemId") Integer systemId) {
return "test";
}
}


3. 书写SystemManager和SystemManagerImpl




4. 把manager配置到Spring Application.xml中




5. 书写Jersey Application

@Path("webapi")
public class TestApplication extends ResourceConfig {
public TestApplication(){
register(RequestContextFilter.class);
register(TestResource.class);
}
}


6. 书写Unit Test文件

public class MyRestTest extends JerseyTest {

@Override
protected Application configure() {
ResourceConfig rc = new MyApplication()
.register(SpringLifecycleListener.class)
.register(RequestContextFilter.class);

enable(TestProperties.LOG_TRAFFIC);
enable(TestProperties.DUMP_ENTITY);

return configure(rc);
}


@Override
protected ResourceConfig configure(ResourceConfig rc) {
rc.property("contextConfigLocation", "spring.xml");
return rc;
}

@Test
public void test(){

final String hello = target("my/jersey/test")
.queryParam("systemId", 1)
.request()
.get(String.class);
System.out.println("==========\n" + hello);
}
}


7. 运行test(),即可看到结果。

这样测试时,如果有问题,比较难定位问题(比如,少了个参数),通常只是打印出500的状态码,没有其他更详细的错误信息(我已经把日志级别设置到最低了)。
虽然如此,用这个方法初步测试下自己的rest service还是很方便的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值