使用mockito和junit進行單測的一些要點:
1,總的來說寫乙個單測需要提前進行三件事
a,看好你要測的函式的入參,構建出乙個入參;
b,詳細看好你的函式中依賴了哪些寫好的函式,這些函式需要進行
@mock宣告,將他們mock掉,使得你的單測只測試你寫的邏輯**;
c,判斷你要得到什麼樣的結果,也就是你的函式要改變哪些變數的值,然後在ut的最後用assert斷言來對這些期望值進行**判斷
下面寫乙個例子,本例要驗證fillmodel這個函式,它的作用是將乙個list中每乙個model的defined屬性設定為true,需要呼叫外部的依賴itemservice來獲取乙個model2的defined值,然後將這個值填入model的defined屬性中。
本例中輸入引數是乙個list,乙個model裡填入kdtid和id兩個屬性,所以首先進行引數準備(見**);
本例需要依賴itemservice下的getspumap方法,希望這個方法返回乙個map,而這個map中value元素model2的defined屬性經過這個方法被設定為true,注意這個方法不是我們寫的,所以在這裡需要被mock掉,而mock掉後返回的結果是希望含有defined屬性為true的。
所以,首先我們構造乙個這個itemservice方法的返回值,也就是乙個map,這個map的value是乙個model2類,而model2的defined被我們預先設定為true;
然後用when語句mock掉itemservice方法,使其返回我們構造好的這個map:
when(itemservice.getspumap(anylong(), anylist())).thenreturn(map);
最後呼叫我們要測驗的方法,然後檢視呼叫後model的defined是否和我們預設的model2的值一樣。
需要注意的是,因為我們要測試的fillmodel這個方法是需要被實際執行的,不能被mock,所以這個方法的類(通常也就是你的測試類對應的方法類)需要加上@injectmock註解。而其中依賴的itemservice.getspumap方法不是我們寫的,我們只是依賴於它的返回值,這個類的初始化要加上@mock註解。
@test
public void test_fillmodel()
另外還有很多實用mockito進行測試的小問題,舉幾個例子:
1,巧用verify語句
verify是用來驗證某函式的執行與否,執行幾次,沒有被執行等
@test
public void verifying_number_of_invocations()
3,用spy來真正呼叫真實的api
@test
public void real_partial_mock()
class a
}
4,使用 new answer()來對未預設的呼叫更改預設期望值
@test
public void unstubbed_invocations()
});
//下面的get(1)沒有預設,通常情況下會返回null,但是使用了answer改變了預設期望值
assertequals(999, mock.get(1));
//下面的size()沒有預設,通常情況下會返回0,但是使用了answer改變了預設期望值
assertequals(999,mock.size());
}
mock的使用相對簡單,但是有很多小細節需要注意,以後使用過程中遇到的問題會更在後面。 MockMvc和Mockito之酷炫使用
由於專案中需要新增單元測試,所以查詢之後發現mockito非常適合現在的web專案。首先需要新增pom依賴 junit junit 4.11 test org.mockito mockito all 1.9.5 在controllertest類上需要新增如下配置 xml風格 runwith spri...
Junit3和Junit4使用區別
在專案經常會用到單元測試,這裡對junit在開發中的使用標準及使用方法進行簡單的介紹。所測試的源 package com.techbirds public class helloworld public void sayworld public string say junit3測試類編寫 pack...
使用junit和Mock做介面測試
一般建立springboot專案的時候,一般都會有test包的依賴,該依賴包依賴了junit,mockito的依賴 org.springframework.boot spring boot starter test test 編寫乙個總的父類 package com.voole import org...