真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

spock中mock和stub的區(qū)別是什么

這篇文章將為大家詳細講解有關spock中mock和stub的區(qū)別是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

創(chuàng)新互聯(lián)主營萊州網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,重慶APP軟件開發(fā),萊州h5微信小程序開發(fā)搭建,萊州網(wǎng)站營銷推廣歡迎萊州等地區(qū)企業(yè)咨詢

使用stub測試樁

如果我們需要測試A方法,但是E方法目前還沒辦法調用,或者還沒開發(fā)完成。這種場景下,就可以使用stub測試樁。stub測試樁可以給E方法模擬一個或多個假的返回值,我們測試時只需要調用stub對象的E方法即可,調用后的返回值是我們在生成stub對象時指定的。如下:

    def "Stub 測試樁"() {
        given: "構造測試樁"
        CalculateInterface calculateService = Stub(CalculateInterface)
        calculateService.plusPlus(_) >> 1

        when:
        int x = calculateService.plusPlus(12)
        int y = calculateService.plusPlus(3)

        then:
        x == 1
        y == 1
    }

上面代碼中,calculateService.plusPlus(_) >> 1 給一個并未實現(xiàn)的plusPlus()方法指定了返回值為1,測試代碼就可以直接調用這個方法了。

其中這個語句的常用格式有:

subscriber.receive(_) >> "ok"
|          |       |     |
|          |       |     生成返回值
|          |       參數(shù)
|          方法
對象

生成返回值:

// 不同參數(shù)生成不同的返回值
subscriber.receive("message1") >> "ok"
subscriber.receive("message2") >> "fail">

通過計算生成返回值

這種方式,生成返回值的格式時一個閉包

// 1.使用方法參數(shù)計算
subscriber.receive(_) >> { args -> args[0].size() > 3 ? "ok" : "fail" }
// 2. 使用其他參數(shù)
subscriber.receive(_) >> { String message -> message.size() > 3 ? "ok" : "fail" }

如果想調用方法拋出異常

subscriber.receive(_) >> { throw new InternalError("ouch") }

鏈式生成返回值

subscriber.receive(_) >>> ["ok", "fail", "ok"] >> { throw new InternalError() } >> "ok"

上面代碼中,方法被調用的前三次分別返回 “ok”, “fail”, “ok”,第四次會拋出異常,第五次及以后調用,會返回“ok”。

以上是spock中stub測試樁的使用場景,總結為一句就是: stub測試樁給被調用者( 方法/模塊)制造假的返回值,以便不影響調用者的測試。

使用mock測試樁

mock測試樁就是模擬一個測試的結果。如下圖,A類調用類B和C類的某個方法:

spock中mock和stub的區(qū)別是什么

如果要測試A的方法,但是我們沒辦法調用B來檢測結果,就可以使用mock測試樁,生成一個B的mock對象。檢驗結果時,可以使用B的mock對象替代B。這個結果一般是B和C方法的調用或者狀態(tài)的改變。

    def subscriber = Mock(Subscriber)   // 1. 創(chuàng)建一個mock對象

    def "should send messages subscriber"() {
        when:
        publisher.send("hello")         // 2. publisher 發(fā)送一個“hello”
        then:
        1 * subscriber.receive("hello") // 3. subscriber 接收到一個“hello”
        1 * subscriber.messageCount == 1
    }

關于spock中mock和stub的區(qū)別是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


新聞名稱:spock中mock和stub的區(qū)別是什么
路徑分享:http://weahome.cn/article/jppojj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部