码迷,mamicode.com
首页 > 其他好文 > 详细

PowerMockito.doReturn().when()与Mockito.when().thenReturn()的区别

时间:2014-12-19 12:11:46      阅读:769      评论:0      收藏:0      [点我收藏+]

标签: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方法会被调用,该方法如下:

@Override
public 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()的区别

标签:mockito   powermock   junit   

原文地址:http://blog.csdn.net/fireofjava/article/details/42025353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!