日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Maven集成测试和Spring Restful Services

發布時間:2023/12/3 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Maven集成测试和Spring Restful Services 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹 我的原始博客通過一個非常簡單的示例展示了如何分離Maven單元和集成測試。 http://johndobie.blogspot.com/2011/06/seperating-maven-unit-integration-tests.html此后,許多人要求我提供比最初使用的示例更實際的示例。 這篇文章展示了如何在實際環境中(實際將應用程序部署到服務器上)使用原始方法拆分單元測試和集成測試。
  • 我們使用Maven構建和單元測試一些基于Spring的靜態Web服務。
  • 然后,我們使用Maven Jetty插件啟動Web服務器并將其部署到其中。
  • 我們創建一個內存數據庫并創建架構
  • 最后,我們在單獨的\ src \ integrationtest \ java目錄中運行所有集成測試
本文旨在直接展示在運行集成測試之前,如何以實際方式使用Maven來啟動一組服務并將其部署到正在運行的服務器上。 它與REST或Spring MVC的微妙細節無關。 我將對此進行簡單介紹,以構建一個可運行的應用程序,同時為那些需要更多細節的人提供更深入的文章參考。

代碼結構

運行示例

完整代碼托管在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服務器的戰爭已部署到服務器
  • 已啟動hsqldb內存數據庫并創建了架構。
  • \ src \ integrationtest \ java目錄中的測試在集成測試階段運行。
  • 服務器已關閉。

如何創建Spring Service類

貿易服務非常簡單。 它使用存儲庫來創建和查找交易。 我沒有包含使整個事情盡可能簡單的例外。 這里唯一的技巧是添加@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);}

如何創建數據庫存儲庫類

上面的服務使用交易存儲庫來創建和查找交易。 我們使用Spring類HibernateDaoSupoort來創建此類,并使事情保持簡單。 通過擴展此類,我們只需要創建我們的交易對象類,并在spring config中定義我們的數據庫詳細信息即可。 該框架負責所有其他細節。

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);} }

如何創建數據庫交易類

我們使用標準的JPA批注定義我們的數據庫交易對象

@Entity public class Trade {@Idprivate long id;

@Entity批注將對象標記為數據庫實體。 @Id注釋顯示了我們希望成為表主鍵的字段。 對于其余字段,我們使用默認行為,因此不需要其他注釋。

如何配置數據庫

對于此示例,我們將使用Hsqldb創建我們的數據庫。 http://hsqldb.org/每次我們啟動服務器時都會創建一個新的實例。 要設置數據庫,我們要做的就是在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>

會話工廠定義我們的數據庫連接詳細信息。 最重要的屬性是

<prop key="hibernate.hbm2ddl.auto">update</prop>

該屬性告訴hibernate在應用程序啟動時更新數據庫。 它將根據我們交易對象上的注釋有效地為交易對象創建表。 運行測試時,您將看到在啟動時執行以下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))

多數民眾贊成在一個新的數據庫設置,并準備就緒。

創建寧靜的界面。

我將在這里介紹基礎知識。 對于一些很棒的例子,請遵循以下鏈接http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/ http://www.stupidjavatricks.com/?p=54

如何創建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 Restful Services的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。