您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關spock中mock和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測試樁就是模擬一個測試的結果。如下圖,A類調用類B和C類的某個方法:
如果要測試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的區別是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。