JerseyTest
2019獨角獸企業重金招聘Python工程師標準>>>
?? jersey測試如果依賴外部web容器,測試起來就不方便了;如果用maven管理項目的話,編譯、打包也很不方便。
?? 無意中發現了jersey-test-framework-grizzly2這么一個測試框架,感覺用起來還可以。根據jersey的使用情況,JerseyTest的應用稍有不同。
??? 都是繼承com.sun.jersey.test.framework.JerseyTest類,復寫setUp()、configure(),setUp啟動內置容器,configure配置資源類包路徑,以及必要的servletClass(默認是com.sun.jersey.spi.container.servlet.ServletContainer)。
測試框架maven依賴
<dependency><groupId>com.sun.jersey.jersey-test-framework</groupId><artifactId>jersey-test-framework-grizzly2</artifactId><version>1.19</version><scope>test</scope> </dependency>1、單純使用jersey,沒有和其他框架集成,比如spring什么的。這種情況的測試最為簡單。項目源碼jersey
package?com.jersey.demo.resources;import?static?org.junit.Assert.assertEquals; import?static?org.junit.Assert.assertTrue;import?java.io.UnsupportedEncodingException; import?java.net.URLEncoder;import?javax.ws.rs.core.MediaType;import?org.junit.Before; import?org.junit.Test;import?com.jersey.demo.core.entity.Member; import?com.sun.jersey.api.client.ClientHandlerException; import?com.sun.jersey.api.client.UniformInterfaceException; import?com.sun.jersey.api.client.WebResource; import?com.sun.jersey.test.framework.AppDescriptor; import?com.sun.jersey.test.framework.JerseyTest; import?com.sun.jersey.test.framework.WebAppDescriptor;/***?繼承JerseyTest進行測試。*?*?@author?sean*?*/ public?class?MemberResourceTest?extends?JerseyTest?{private?final?String?name?=?"張三";private?WebResource?wr;@Beforepublic?void?setUp()?throws?Exception?{super.setUp();wr?=?resource();}/***?默認servletClass=com.sun.jersey.spi.container.servlet.ServletContainer*/@Overrideprotected?AppDescriptor?configure()?{return?new?WebAppDescriptor.Builder("com.jersey.demo.resources").contextPath("jerseyDemo").build();}@Testpublic?void?testXml()?{Member?member?=?wr.path("member/xml").accept(MediaType.APPLICATION_XML).get(Member.class);//?驗證assertEquals(name,?member.getName());}//?其他測試用列 }以上測試類configure()方法中的Builder的部分源碼如下,可以看出默認servletClass=ServletContainer,和jersey在web.xml中的配置是一致的。
public?class?WebAppDescriptor?extends?AppDescriptor?{public?static?class?Builderextends?AppDescriptorBuilder<Builder,?WebAppDescriptor>?{protected?Map<String,?String>?initParams;protected?Map<String,?String>?contextParams;protected?Class<??extends?HttpServlet>?servletClass?=?ServletContainer.class;} }2、當jersey和spring集成的時候,需要用到com.sun.jersey.spi.spring.container.servlet.SpringServlet,SpringServlet需要加載spring的配置。如果只是簡單的指定SpringServlet.class,將無法注入spring容器中實例對象。
項目源碼jerseySpring
//?這樣是不行的?FIXME @Override protected?AppDescriptor?configure()?{return?new?WebAppDescriptor.Builder("com.jersey.demo.resources").servletClass(SpringServlet.class).contextPath("jerseyDemo").build(); }所以自定義了一個servlet,復寫了SpringServlet的getDefaultContext()方法,加載spring的配置,這樣就完美的集成了。
package?com.jersey.demo.web.servlet;import?org.springframework.context.ConfigurableApplicationContext; import?org.springframework.context.support.ClassPathXmlApplicationContext;import?com.sun.jersey.spi.spring.container.servlet.SpringServlet;public?class?MyJerseyServlet?extends?SpringServlet?{private?static?final?long?serialVersionUID?=?1L;@Overrideprotected?ConfigurableApplicationContext?getDefaultContext()?{return?new?ClassPathXmlApplicationContext("applicationContext.xml");} } package?com.jersey.demo.resources; /***?繼承JerseyTest測試。*?*?@author?sean*?*/ public?class?MemberResourceTest?extends?JerseyTest?{private?final?String?name?=?"張三";private?WebResource?wr;@Beforepublic?void?setUp()?throws?Exception?{super.setUp();wr?=?resource();}/***?加載自定義的MyJerseyServlet,實現與spring容器的集成。*/@Overrideprotected?AppDescriptor?configure()?{return?new?WebAppDescriptor.Builder("com.jersey.demo.resources").servletClass(MyJerseyServlet.class).contextPath("jerseyDemo").build();}@Testpublic?void?testXml()?{Member?member?=?wr.path("member/xml").accept(MediaType.APPLICATION_XML).get(Member.class);//?驗證assertEquals(name,?member.getName());}//?其他測試用例 }轉載于:https://my.oschina.net/u/2007041/blog/464277
總結
以上是生活随笔為你收集整理的JerseyTest的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IPC——流套接字通信
- 下一篇: Pyqt 中__init__(self,