moco代碼賞析四

對(duì)于作者的第四次提交,我們直接從代碼的單元測(cè)試類入手才避,來看看做了哪些改動(dòng)橱夭。


以前的調(diào)用方式:

        server.request(eqUri("/foo"))).response("bar");

現(xiàn)在的調(diào)用方式:

        server.request(eq(uri("/foo"))).response(seq("bar", "blah"));
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("foo.response");
        server.request(eq(uri("/foo"))).response(stream(is));

我們可以直觀的看到兩處不同:
一、eqUri()方法變成了eq(uri())兩步
二桑逝、response()方法可以通過seq()方法傳入一個(gè)String類型的可變長(zhǎng)數(shù)組
三棘劣、response()方法可以通過stream()方法傳入一個(gè)流
下面來細(xì)致的談一下這三點(diǎn)改動(dòng)。

首先楞遏,eq(uri())這個(gè)方法需要傳入一個(gè)String類型的參數(shù)茬暇,先將參數(shù)包裝成作者自定義的Uri類型首昔,再將Uri類型轉(zhuǎn)換成Matcher類型去進(jìn)行類型匹配,包裝成Uri類型這一動(dòng)作在這一版代碼中并沒有體現(xiàn)很多的作用糙俗,因?yàn)榘b后勒奇,沒有經(jīng)過任何的操作還是轉(zhuǎn)成了Matcher類型,但是作者把eq()方法與uri()方法剝離開巧骚,就可以eq()更多的類型赊颠,后面可以有和Uri類型同級(jí)別的類型,這樣做的好處會(huì)在日后的擴(kuò)展中體現(xiàn)出來劈彪。

第二點(diǎn)竣蹦,seq()方法可以傳入String的可變長(zhǎng)數(shù)組,返回SequenceResponseHandler對(duì)象沧奴,值得一提的是痘括,在這個(gè)對(duì)象中,有一個(gè)計(jì)數(shù)器滔吠,負(fù)責(zé)記錄當(dāng)前調(diào)用了幾次該方法纲菌,根據(jù)這個(gè)數(shù)值可以返回傳入的String數(shù)組中的第幾個(gè),即contents[current()]疮绷。

    protected void writeContent(ChannelBuffer buffer) {
        buffer.writeBytes(contents[current()].getBytes());
    }

    private int current() {
        int current = this.index;
        if (++index >= contents.length) {
            index = contents.length - 1;
        }

        return current;
    }

第三點(diǎn)驰后,stream()方法也是同理最后轉(zhuǎn)成了ResponseHandler類型傳入response()方法,但是它支持以流的形式作為參數(shù)傳入矗愧。其實(shí)在實(shí)現(xiàn)上灶芝,作者并沒有真正把讀進(jìn)來的字符串轉(zhuǎn)成流,而是直接轉(zhuǎn)成了response()方法需要的ResponseHandler類型唉韭,而作者其實(shí)在這版代碼中已經(jīng)預(yù)留了Stream類夜涕,后面的提交想必會(huì)把string轉(zhuǎn)成stream再傳入response()方法。


最后我們還可以看到属愤,作者重構(gòu)了他的單元測(cè)試類女器,把代碼中的重復(fù)部分

      Content content = Request.Get("http://localhost:8080")
                            .execute().returnContent();

進(jìn)行提取,重構(gòu)了一個(gè)方法

    private void assertContentFromUri(String uri, String expectedContent) throws IOException {
        assertThat(get(uri), is(expectedContent));
    }

    private String get(String uri) throws IOException {
        Content content = Request.Get(uri)
                .execute().returnContent();
        return content.asString();
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末住诸,一起剝皮案震驚了整個(gè)濱河市驾胆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贱呐,老刑警劉巖丧诺,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奄薇,居然都是意外死亡驳阎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呵晚,“玉大人蜘腌,你說我怎么就攤上這事《叮” “怎么了撮珠?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)金矛。 經(jīng)常有香客問我劫瞳,道長(zhǎng),這世上最難降的妖魔是什么绷柒? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮涮因,結(jié)果婚禮上废睦,老公的妹妹穿的比我還像新娘。我一直安慰自己养泡,他們只是感情好嗜湃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著澜掩,像睡著了一般购披。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肩榕,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天刚陡,我揣著相機(jī)與錄音,去河邊找鬼株汉。 笑死筐乳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乔妈。 我是一名探鬼主播蝙云,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼路召!你這毒婦竟也來了勃刨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤股淡,失蹤者是張志新(化名)和其女友劉穎身隐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唯灵,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抡医,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忌傻。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡大脉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出水孩,到底是詐尸還是另有隱情镰矿,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布俘种,位于F島的核電站秤标,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宙刘。R本人自食惡果不足惜苍姜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悬包。 院中可真熱鬧衙猪,春花似錦、人聲如沸布近。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撑瞧。三九已至棵譬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間预伺,已是汗流浹背订咸。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酬诀,地道東北人算谈。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像料滥,于是被迫代替她去往敵國(guó)和親然眼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理葵腹,服務(wù)發(fā)現(xiàn)高每,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法践宴,類相關(guān)的語(yǔ)法鲸匿,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法阻肩,異常的語(yǔ)法带欢,線程的語(yǔ)...
    子非魚_t_閱讀 31,634評(píng)論 18 399
  • #Android 基礎(chǔ)知識(shí)點(diǎn)總結(jié) ---------- ##1.adb - android debug bridg...
    Mythqian閱讀 3,284評(píng)論 2 11
  • glob匹配規(guī)則 glob主要為篩選文件 * 匹配任意 0 或多個(gè)任意字符 ? 匹配任意一個(gè)字符 [...] 若字...
    shibin閱讀 423評(píng)論 0 1
  • 前言:前面我們講了線程封閉技術(shù)(確保對(duì)象不被發(fā)布)和發(fā)布不可變對(duì)象乔煞。 3.5 安全發(fā)布 在某些情況下吁朦,我們希望在多...
    伊凡的一天閱讀 275評(píng)論 0 2