PowerMockito.doReturn().when()與Mockito.when().thenReturn()的區別

來源:互聯網
上載者:User

標籤: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()的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.