91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spock中mock和stub的區別是什么

發布時間:2021-06-18 15:32:07 來源:億速云 閱讀:399 作者:Leah 欄目:大數據

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

使用stub測試樁

如果我們需要測試A方法,但是E方法目前還沒辦法調用,或者還沒開發完成。這種場景下,就可以使用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 給一個并未實現的plusPlus()方法指定了返回值為1,測試代碼就可以直接調用這個方法了。

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

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

生成返回值:

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

通過計算生成返回值

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

// 1.使用方法參數計算
subscriber.receive(_) >> { args -> args[0].size() > 3 ? "ok" : "fail" }
// 2. 使用其他參數
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的區別是什么

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

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金湖县| 民勤县| 芦山县| 海晏县| 铜鼓县| 定襄县| 长武县| 新兴县| 石棉县| 南和县| 麻栗坡县| 蕲春县| 达尔| 宜都市| 南木林县| 成武县| 阳朔县| 昭通市| 兴城市| 桃江县| 三原县| 丹棱县| 津市市| 宣汉县| 商丘市| 涟水县| 武乡县| 洱源县| 永丰县| 武邑县| 福海县| 元谋县| 旌德县| 和静县| 云梦县| 满城县| 荣成市| 永善县| 侯马市| 招远市| 英吉沙县|