javascript
maven集成spring_Maven集成测试和Spring Restful Services
maven集成spring
介紹 我的原始博客通過一個非常簡單的示例展示了如何分離Maven單元和集成測試。 http://johndobie.blogspot.com/2011/06/seperating-maven-unit-integration-tests.html此后,許多人要求我提供比最初使用的示例更實際的示例。 這篇文章顯示了如何在實際環(huán)境中(實際將應用程序部署到服務器上)使用原始方法拆分單元測試和集成測試。- 我們使用Maven構建和對基于Spring的靜態(tài)Web服務進行單元測試。
- 然后,我們使用Maven Jetty插件啟動Web服務器并將其部署到其中。
- 我們創(chuàng)建一個內存數(shù)據庫并創(chuàng)建架構
- 最后,我們在單獨的\ src \ integrationtest \ java目錄中運行所有集成測試
代碼結構
運行示例
完整代碼托管在Google代碼上。 使用以下命令將其檢出并運行。 在運行測試之前,請確保端口8080上沒有任何運行。
svn co https://designbycontract.googlecode.com/svn/trunk/examples/maven/spring-rest-example cd spring-rest-example mvn clean install -Pit,jetty您可以在以下Cloudbees托管的Jenkins實例上查看完整版本。 https://designbycontract.ci.cloudbees.com/job/spring-rest-example/
運行示例的結果
- 標準的Maven測試結構中的測試照常在單元測試階段運行。
- Jetty Web服務器啟動
- 包含Web服務器的戰(zhàn)爭已部署到服務器
- 已啟動hsqldb內存數(shù)據庫并創(chuàng)建了架構。
- \ src \ integrationtest \ java目錄中的測試在集成測試階段運行。
- 服務器已關閉。
如何創(chuàng)建Spring Service類
貿易服務非常簡單。 它使用存儲庫來創(chuàng)建和查找交易。 我沒有包含使整個過程盡可能簡單的例外。 這里唯一的技巧是添加@Service批注,否則它是直接的Java。
@Service public class SimpleTradeService implements TradeService {@AutowiredTradeRepository tradeRepository; public SimpleTradeService(TradeRepository tradeRepository) {this.tradeRepository = tradeRepository;}@Overridepublic Long createTrade(Trade t) {Long id = tradeRepository.createTrade(t);return id;}@Overridepublic Trade getTradeById(Long id) {return tradeRepository.getTradeById(id);}如何創(chuàng)建數(shù)據庫存儲庫類
上面的服務使用交易存儲庫來創(chuàng)建和查找交易。 我們使用Spring類HibernateDaoSupoort來創(chuàng)建此類,并使事情保持簡單。 通過擴展此類,我們只需要創(chuàng)建我們的交易對象類,并在spring config中定義我們的數(shù)據庫詳細信息。 該框架負責所有其他細節(jié)。
public class HibernateTradeRepository extends HibernateDaoSupport implements TradeRepository{@Overridepublic Trade getTradeByReference(String reference) {throw new RuntimeException();}@Overridepublic Long createTrade(Trade trade) {return (Long) getHibernateTemplate().save(trade);}@Overridepublic Trade getTradeById(Long id) {return getHibernateTemplate().get(Trade.class, id);} }如何創(chuàng)建數(shù)據庫交易類
我們使用標準的JPA批注定義我們的數(shù)據庫交易對象
@Entity public class Trade {@Idprivate long id;@Entity批注將對象標記為數(shù)據庫實體。 @Id注釋顯示了我們想成為表主鍵的字段。 對于其余字段,我們使用默認行為,因此不需要其他注釋。
如何配置數(shù)據庫
對于此示例,我們將使用Hsqldb創(chuàng)建數(shù)據庫。 http://hsqldb.org/每次我們啟動服務器時都會創(chuàng)建一個新的實例。 要設置數(shù)據庫,我們要做的就是在spring config trade-servlet.xml中定義它
<bean id="sessionFactory" <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="packagesToScan"value="com.dbc.model" /><property name="hibernateProperties"><props><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop><prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop><prop key="hibernate.connection.pool_size">0</prop><prop key="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</prop><prop key="hibernate.connection.url">jdbc:hsqldb:target/data/tradedatabase;shutdown=true</prop><prop key="hibernate.connection.username">sa</prop><prop key="hibernate.connection.password"></prop><prop key="hibernate.connection.autocommit">true</prop><prop key="hibernate.jdbc.batch_size">0</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property></bean>會話工廠定義我們的數(shù)據庫連接詳細信息。 最重要的屬性是
<prop key="hibernate.hbm2ddl.auto">update</prop>該屬性告訴hibernate在應用程序啟動時更新數(shù)據庫。 它將根據我們交易對象上的注釋有效地為交易對象創(chuàng)建表。 運行測試時,您將看到在啟動時執(zhí)行以下SQL。
11:30:31,899 DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate SchemaUpdate:203 - create table Trade (id bigint not null, description varchar(255), reference varchar(255), primary key (id))多數(shù)民眾贊成在新的數(shù)據庫設置,并準備就緒。
創(chuàng)建寧靜的界面。
我將在這里介紹基礎知識。 對于一些很棒的例子,請遵循以下鏈接http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/ http://www.stupidjavatricks.com/?p=54
如何創(chuàng)建Spring控制器
Spring控制器是整個示例的關鍵。 是控制器接受我們的請求并將其傳遞給貿易服務部門進行處理。 它定義了restful接口。 我們使用@PathVariable使事情變得簡單。
@RequestMapping(value = "/create/trade/{id}") public ModelAndView createTrade(@PathVariable Long id) {Trade trade = new Trade(id); service.createTrade(trade);ModelAndView mav = new ModelAndView("tradeView", BindingResult.MODEL_KEY_PREFIX + "trade", trade);return mav; }@RequestMapping(value = "/find/trade/{id}") public ModelAndView findTradeById(@PathVariable Long id) {Trade trade = service.getTradeById(id);ModelAndView mav = new ModelAndView("tradeView", BindingResult.MODEL_KEY_PREFIX + "trade", trade);return mav; }通過使用來自/ find / trade / {id}的值填充@PathVariable id可以非常簡單地工作,例如,請求/ find / trade / 1會將引用填充為“ 1”,而請求/ find / trade / 29則將填充引用為“ 29”可在此處找到更多信息: http : //static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates
如何配置Web應用程序
web.xml中Web應用程序的配置非常簡單。 首先我們注冊Spring Servlet
tradeorg.springframework.web.servlet.DispatcherServlet1接下來,我們定義到servlet的映射。 該映射會將所有請求傳遞給我們的servlet。
trade/*如何配置Spring
Spring配置由許多不同的元素組成。 第一行只是告訴Spring在哪里尋找注釋
BeanNameViewResolver使用名稱
這個看起來很恐怖的XML可以確保將Trade對象作為XML返回。 XStream將獲取對象,并自動將其轉換為XML格式。
Trade類為此定義了XStream注釋。
@XStreamAlias("trade") public class Trade {在我們的案例中,您可以從測試中看到我們從/ search / trade / 1獲得了以下內容
1如何啟動和停止Jetty服務器
我使用Jetty插件啟動服務器并部署包含服務的war文件。 http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin服務器使用pom.xml中的以下代碼段啟動服務器
<execution><id>start-jetty</id><phase>pre-integration-test</phase><goals><goal>run</goal></goals> </execution>使用pom.xml中的以下代碼片段停止服務器
<execution><id>stop-jetty</id><phase>post-integration-test</phase><goals><goal>stop</goal></goals> </execution>如何運行集成測試
如原始文章中所述,使用故障保護運行集成測試。 http://johndobie.blogspot.com/2011/06/seperating-maven-unit-integration-tests.html我們使用新的Spring RestTemplate來簡化對服務的調用。
@Test public void testGetTradeFromRestService() throws Exception {long id = 10L;createTrade(id);String tradeXml = new RestTemplate().getForObject("http://localhost:8080/find/trade/{id}",String.class, id);System.out.println(tradeXml);Trade trade = getTradeFromXml(tradeXml);assertEquals(trade.getId(), id); }參考: Agile Engineering Techniques博客上的JCG合作伙伴 John Dobie提供的Maven集成測試和Spring Restful Services 。
翻譯自: https://www.javacodegeeks.com/2012/05/maven-integration-testing-and-spring.html
maven集成spring
總結
以上是生活随笔為你收集整理的maven集成spring_Maven集成测试和Spring Restful Services的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑Win7系统桌面图标太大怎么调小如何
- 下一篇: 台式机安装光驱的方法台式电脑如何安装光驱