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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Apache Camel Test Framework(MOCK)

發(fā)布時(shí)間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache Camel Test Framework(MOCK) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://jnn.iteye.com/blog/1327693

先說(shuō)點(diǎn)題外話 :上周五我和幾個(gè)朋友交流的時(shí)候我發(fā)現(xiàn)大家很少寫(xiě)測(cè)試,分析原因一個(gè)可能是大家認(rèn)為程序還不復(fù)雜,我寫(xiě)測(cè)試的回報(bào)不高,還有一個(gè)原因可能是寫(xiě)單元測(cè)試很麻煩。 其實(shí)測(cè)試代碼也可以寫(xiě)得很漂亮,而且一旦你針對(duì)自己的業(yè)務(wù)講測(cè)試封裝好了,其實(shí)寫(xiě)測(cè)試是很愜意的一件事。

?

對(duì)于我來(lái)說(shuō)寫(xiě)Apache Camel的測(cè)試框架已經(jīng)達(dá)到了這樣的效果,在對(duì)Camel 代碼除蟲(chóng)和添加新的功能的時(shí)候,我都很樂(lè)意寫(xiě)測(cè)試,因?yàn)橛袦y(cè)試框架,我只需要花幾分鐘的時(shí)候就可以寫(xiě)完一個(gè)單元測(cè)試,我得到的回報(bào)是每天的工作都會(huì)測(cè)試幫我保駕護(hù)航,很容易重現(xiàn)用戶報(bào)的bug,在準(zhǔn)備產(chǎn)品發(fā)布的時(shí)候可以不用加班。

?

廣告基本做完了,現(xiàn)在簡(jiǎn)單介紹一下和Camel業(yè)務(wù)相關(guān)的內(nèi)容。了解Apache Camel的朋友應(yīng)該知道,Camel作為一個(gè)實(shí)現(xiàn)了企業(yè)應(yīng)用集成模式(EIP) 的消息媒介,其對(duì)客戶展現(xiàn)的業(yè)務(wù)核心就是消息路由規(guī)則。由于Camel支持通過(guò)Java,Spring,Scala等 DSL來(lái)定義路由規(guī)則,一個(gè)具體的Camel應(yīng)用其實(shí)是有不同的路由規(guī)則組成的,Camel 測(cè)試框架對(duì)其加載DSL部分的內(nèi)容進(jìn)行封裝。Camel應(yīng)用測(cè)試需要了解消息在Camel內(nèi)部路由的具體情況以確保消息是以期望的方式進(jìn)行路由的, 在Camel測(cè)試框架中MockEndpoint就充當(dāng)了這樣的角色,通過(guò)MockEndpoint你可以很方便地獲取路由至此的消息,并對(duì)消息內(nèi)容進(jìn)行驗(yàn)證。

?

如果要使用Camel測(cè)試框架,你只需要在maven pom 中添加camel-test模塊的依賴,針對(duì)你要測(cè)試的應(yīng)用類型繼承CamelTestSupport或者CamelSpringTestSupport, 相關(guān)的TestSupport會(huì)幫你搞定CamelContext,PrdoucerTemplate,ConsumerTemplate創(chuàng)建,以及相關(guān)路由規(guī)則加載的工作。這樣你只需要在你的測(cè)試代碼中針對(duì)你的路由準(zhǔn)備好消息和使用MockEndpoint來(lái)驗(yàn)證消息路由的情況就可以了。

?

讓我們來(lái)看一個(gè)具體的例子

Java代碼 ?
  • package?org.apache.camel.test.patterns; ??
  • ??
  • import?org.apache.camel.EndpointInject; ??
  • import?org.apache.camel.Produce; ??
  • import?org.apache.camel.ProducerTemplate; ??
  • import?org.apache.camel.builder.RouteBuilder; ??
  • import?org.apache.camel.component.mock.MockEndpoint; ??
  • import?org.apache.camel.test.junit4.CamelTestSupport; ??
  • import?org.junit.Test; ??
  • ??
  • public?class?FilterJUnit4Test?extends?CamelTestSupport?{ ??
  • ??
  • ????@EndpointInject(uri?=?"mock:result") ??
  • ????protected?MockEndpoint?resultEndpoint; ??
  • ??
  • ????@Produce(uri?=?"direct:start") ??
  • ????protected?ProducerTemplate?template; ??
  • ??
  • ????@Test??
  • ????public?void?testSendMatchingMessage()?throws?Exception?{ ??
  • ????????String?expectedBody?=?"<matched/>"; ??
  • ??
  • ????????resultEndpoint.expectedBodiesReceived(expectedBody); ??
  • ??
  • ????????template.sendBodyAndHeader(expectedBody,?"foo",?"bar"); ??
  • ??
  • ????????resultEndpoint.assertIsSatisfied(); ??
  • ????} ??
  • ??
  • ????@Test??
  • ????public?void?testSendNotMatchingMessage()?throws?Exception?{ ??
  • ????????resultEndpoint.expectedMessageCount(0); ??
  • ??
  • ????????template.sendBodyAndHeader("<notMatched/>",?"foo",?"notMatchedHeaderValue"); ??
  • ??
  • ????????resultEndpoint.assertIsSatisfied(); ??
  • ????} ??
  • ??
  • ????@Override??
  • ????protected?RouteBuilder?createRouteBuilder()?{ ??
  • ????????return?new?RouteBuilder()?{ ??
  • ????????????public?void?configure()?{ ??
  • ????????????????from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result"); ??
  • ????????????} ??
  • ????????}; ??
  • ????} ??
  • }??
  • package org.apache.camel.test.patterns;import org.apache.camel.EndpointInject; import org.apache.camel.Produce; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.Test;public class FilterJUnit4Test extends CamelTestSupport {@EndpointInject(uri = "mock:result")protected MockEndpoint resultEndpoint;@Produce(uri = "direct:start")protected ProducerTemplate template;@Testpublic void testSendMatchingMessage() throws Exception {String expectedBody = "<matched/>";resultEndpoint.expectedBodiesReceived(expectedBody);template.sendBodyAndHeader(expectedBody, "foo", "bar");resultEndpoint.assertIsSatisfied();}@Testpublic void testSendNotMatchingMessage() throws Exception {resultEndpoint.expectedMessageCount(0);template.sendBodyAndHeader("<notMatched/>", "foo", "notMatchedHeaderValue");resultEndpoint.assertIsSatisfied();}@Overrideprotected RouteBuilder createRouteBuilder() {return new RouteBuilder() {public void configure() {from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result");}};} }

    ?

    首先在createRouteBuilder() 中定義了相關(guān)路由規(guī)則。這個(gè)路由是通過(guò)判斷消息頭foo的內(nèi)容是否為bar來(lái)決定是否讓消息通過(guò)。 其中 消息路由的入口是"direct:start" 節(jié)點(diǎn), Camel測(cè)試框架支持通過(guò)annoation的方式注入節(jié)點(diǎn)(Endpoint)或者發(fā)送模板(ProducerTemplate),這樣在測(cè)試代碼中可以直接引用這些節(jié)點(diǎn)或者模版。

    ?

    這樣的測(cè)試是不是很直觀呢,對(duì)于設(shè)置路由規(guī)則的開(kāi)發(fā)這來(lái)說(shuō),他只需要將路由規(guī)則和相關(guān)的MockEndpoint的驗(yàn)證條件設(shè)置好,就可以跑測(cè)試了。

    ?

    總結(jié)

    以上是生活随笔為你收集整理的Apache Camel Test Framework(MOCK)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产综合影院 | 污污免费观看 | 男人久久久 | 亚洲人成人网 | 操出白浆视频 | 狠狠干2022 | 久久香蕉精品 | 欧美无砖区 | 国产午夜大片 | 中文字幕一区二区三区乱码人妻 | 日日夜夜欧美 | 国产成人综合在线 | 久久久精品人妻一区二区三区 | 日本三级日本三级日本三级极 | 国产成人99久久亚洲综合精品 | 农村妇女毛片 | 国产又大又黄又爽 | 天天草综合 | 黄色网页免费观看 | 美女三区 | 大尺度叫床戏做爰视频 | 噼里啪啦高清 | 日韩夜色| 精品一区二区人妻 | 亚洲福利影院 | 精品一区二区日韩 | 三级全黄做爰龚玥菲在线 | 日本天堂网在线观看 | 麻豆视频免费网站 | 国产黄 | 欧美久久久久久又粗又大 | 日韩精品视频免费在线观看 | 久久特级毛片 | 国产伦乱 | 国产欧美精品区一区二区三区 | 亚洲国产欧美在线人成 | 豆国产97在线 | 亚洲 | 成人欧美一区二区三区小说 | 日韩91在线| 日韩欧美卡一卡二 | 精品国产区| 在线波多野结衣 | 在线观看亚洲一区二区 | 青娱网电信一区电信二区电信三区 | 爱爱的免费视频 | 德国性猛交xxxxhd | 山村淫强伦寡妇 | xxxx.国产 | 国产特黄aaaaa毛片 | 日本亲与子乱xxx | 黄色字幕网 | 一区二区三区在线观 | 国产999精品久久久久久 | 欧美aaa在线观看 | 手机看片1024在线 | 五月深爱网 | 射进来av影视 | 成人国产视频在线观看 | 国产婷婷色综合av蜜臀av | 激情视频网址 | 五月深爱婷婷 | 亚洲一区二区色图 | 欧美一二三区在线观看 | 亚洲精品国产精品国自产在线 | 国产福利影院 | 免费视频爱爱太爽 | 69av视频在线 | 在线一区二区观看 | 手机在线永久免费观看av片 | 日韩激情小说 | 懂色av中文字幕 | 亚洲影院一区 | 国产精品jizz在线观看老狼 | 五月激情五月婷婷 | 99国产精品白浆在线观看免费 | 国产精欧美一区二区三区白种人 | 不卡一二三 | 日日日日日日 | 亚洲不卡在线视频 | 亚洲伦理在线观看 | 欧美人妻精品一区二区免费看 | 国产色视频在线 | 欧美无极品 | 亚洲乱码一区二区三区在线观看 | 一个色在线视频 | 秋霞成人午夜鲁丝一区二区三区 | 99久久婷婷国产精品综合 | xxxwww黄色 | 人人草在线观看 | 日韩天堂在线视频 | 亚洲第一成人网站 | 天堂网中文字幕 | 韩国短剧在线观看 | 久久伊人色 | 国产色悠悠 | 亚洲精品国产无码 | 免费20分钟超爽视频 | 激情超碰| 国产精品久久久久影院老司 |