Mockito入門學習(1)–概念介紹

首先, 在我們學習Mockito之前,我們需要區分幾個概念,這幾個概念對於我們接下來使用Mockito至關重要,只有理清了這幾個概念,在我們使用Mockito接口以及進行解說的時候纔不會覺得莫名。

檢測方式

首先我們需要介紹的是檢測的方式。我們寫單元測試,以及使用Mockito都是爲了檢驗我們的代碼是否按照我們預期的那樣運行。一般來說,有以下兩種檢測方式:

狀態檢測(state verification):方法運行之後,通過檢測方法的狀態(或者說返回值)進行判斷方法是否運行成功。參照以下示例。

call  user_id = user_registeration
verify user_id == "123456"

行爲檢測(behavior verification):方法運行之後,通過檢測方法的執行行爲(或者說執行順序)進行判斷方法是否運行成功。參照以下示例。

call user_registeration
verify during user_registeration, write_to_database is called

替換對象

其次,這裏介紹的是在mock對象時會使用到的不同的替換對象,主要有以下兩種:

樁(stub):模擬一個Object,當輸入特定值的時候,返回hard code的指定值,並不真正執行邏輯,類似於複寫(override)了該方法,在複寫的方法中不執行任何邏輯只返回了特定值。多使用於state verification。

例子:假設sum(List<Long> longs)方法對一系列的數進行求和,由於數值比較大可能需要10分鐘(。。。這得多大的數據啊,但是假設如此),在進行Unit Test的時候,我們並不會真正的等10分,而是假設我們提供一個特定的序列,sum方法會返回特定的值,中間的執行邏輯被捨棄了。類似於sum(Arrays.asList(1,2,3)){return 6;},其中的邏輯被捨棄了。

模擬對象(mock):同樣是模擬一個Object,相比於stub,mock更關心對象的期望行爲,然後驗證期望的行爲是否發生,也就是說,在測試時,並不關心方法具體返回了什麼,只關心某些特定的方法被使用到了,因此更常用於behavior verification中。對於驗證void返回值的場景,mock就有了獨到的優勢。

例子:假設測試一個下單(order)操作,在調用order()方法後,calculateSumOfAllStuffPrice()應該要被調用,但是並不關心這個方法的返回值。

此文同步發佈到Wordpress

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章