標籤:mockito powermock junit
PowerMockito.doReturn().when()與Mockito.when().thenReturn()的區別
1.當使用PowerMockito.doReturn(null).when(handler, "getFareRules", Integer.valueOf(requestDTO.getFareId()), "GB");時
handler的getFareRules方法不會被真的調用,在getFareRules裡面打一些日誌,這些日誌不會輸出,也就是說根本沒有真的去調用該方法,而是直接
調用了代理方法,返回在doReturn設定的值。
2.當使用Mockito.when(handler.getFareRules(Integer.valueOf(requestDTO.getFareId()), "GB")).thenReturn(new FareRules());時
handler.getFareRules方法會被調用,該方法如下:
@Overridepublic FareRules getFareRules(final int fareId, final String languageCode) { FareRules f= this.fareRulesDataProvider.getFareRules(fareId, languageCode);//fareRulesDataProvider被mock dataProvider.getFFMarketList("CX", "REV");//dataProvider沒有被mock List<Fare> fares = fareDateProvider.getFareListByPromotionCode("aaa");//被mock fareRulesDataProvider.hashCode(); return f;}
我們設定調用該方法時,返回一個new的FareRules,在執行
Mockito.when(handler.getFareRules(Integer.valueOf(requestDTO.getFareId()), "GB")).thenReturn(new FareRules());
這句時,會報錯,我發現,
第一句
FareRules f= this.fareRulesDataProvider.getFareRules(fareId, languageCode);
f的值是Null
第二句
dataProvider.getFFMarketList("CX", "REV");
出現nullpointexception,因為dataProvider沒有mock,也就是Null
第三句
List<Fare> fares = fareDateProvider.getFareListByPromotionCode("aaa");
出現錯誤說getFareListByPromotionCode不能訪問FareRules,它應該返回List<Fare>
也就是說該方法裡面所有被mock的外部調用,它都訪回thenReturn中設定的值。
但是為什麼第一句返回null而不是我們設定的new FareRules呢?這是因為在執行這句Mock語句時,它僅僅會返回一個null,到執行測試的時候,
去調用handler.getFareRules, 才會返回我們設定的new FareRules.
PowerMockito.doReturn().when()與Mockito.when().thenReturn()的區別