Powermock使用筆記

2021-10-10 04:18:51 字數 2257 閱讀 3157

powermock使用

公有方法mock

私有方法mock

準備:測試類繼承powermocktestcase,測試類新增註解,註解的大括號中為被測試私有方法的類,

@preparefortest()

mock:powermockito.donothing().when(uniqueservice, "checkactivateuniquecondition", role, uniquetype);呼叫:私有方法使用反射的方法呼叫:boolean res = whitebox.invokemethod(heroservice, 「checklevel」, obj, herolevel);

靜態方法mock

準備:測試類繼承powermocktestcase,測試類新增註解,註解的大括號中為被測試靜態方法的類,

@preparefortest(),powermockito.mockstatic(uniqueservice.class)

mock: 由於mockstatic方法的作用,該類中所有的方法均被mock,方法返回的值是對應的零值,對於有些需要指定返回值的情況可以使用:

powermockito.when(masterstrokeservice.class,"getshopeventwithpoint",position).thenreturn(shopevent);

powermockito.when(masterstrokeservice.getshopeventwithpoint(position)).thenreturn(shopevent);(推薦)需要真實執行:對於有些方法不想被mock,而整個類被已經被mock的情況:

powermockito.docallrealmethod().when(masterstrokeservice.class, "checkinitshop", role, eventid, pos);

(公有方法:powermockito.docallrealmethod().when(forgeservice).syncclientdata(this.role, record);

powermockito.when(masterstrokeservice.getlinetagbypoint(startpoint, endpoint)).thencallrealmethod();(when中必須有返回值)

單元測試的驗證

驗證結果與預期相同:

assertequals(baseexception.gettype(), result);驗證方法是否被執行

powermockito.verifyprivate(masterstrokeservice.class,mockito.atleastonce()).invoke("methodname", param1, param2);

mockito.verify(forgetaskmanager, mockito.atleastonce()).sendtaskreward(param1, param2);

測試中的其他需求

需要mock被mock的物件中的乙個成員時:

forgemanager = powermockito.mock(forgemanager.class);

forgeservice = powermockito.mock(forgeservice.class);

whitebox.setinternalstate(forgeservice, "forgemanager", forgemanager);

保證forgeservice呼叫forgemanager的物件時是被mock的。否則可能導致mock失敗,forgeservice的中的forgemanager物件與實際使用

的不一致。

希望方法執行中某些new生成的物件為指定的物件時:

random random = powermockito.spy(new random());

powermockito.whennew(random.class).withanyarguments().thenreturn(random);

powermockito.doreturn(randata).when(random, "nextfloat");

技術拓展

Vim 使用筆記

set hlsearch set nohlsearch 搜尋後清除上次的加亮 nohl nohlsearch 拷貝 很有用的一句話,規定了格式選項,讓它換行不自動空格 set formatoptions tcrqn set fo r set noautoindent 再 shift insert 正...

xemacs使用筆記

xemacs使用筆記 xemacs emacs的下一代,由lucid原創 from debian參考手冊.由於不知道什麼時候刪掉了emacs的乙個重要檔案.每次都沒法安裝好.突然發現了xemacs,於是決定使用看看.本人還是菜鳥,僅供交流 我使用的ubuntu系統,所以就直接apt get inst...

TreeView使用筆記

treeview由節點構成,建樹通過對treeview.items屬性進行操作。items是乙個ttreenodes物件,這是乙個ttreenode集。一 針對ttreenodes,也就是 treeview.items,有這些屬性 1 count,節點個數。2 item index 通過index得...