首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

mockito中两种一部分mock的实现

2012-08-22 
mockito中两种部分mock的实现什么是类的部分mock(partial mock)?A:部分mock是说一个类的方法有些是实际调

mockito中两种部分mock的实现

什么是类的部分mock(partial mock)?

A:部分mock是说一个类的方法有些是实际调用,有些是使用mockito的stubbing(桩实现)。

?

?

为什么需要部分mock?

A:当需要测试一个组合方法(一个方法需要其它多个方法协作)的时候,某个叶子方法(只供别人调用,自己不依赖其它反复)已经被测试过,我们其实不需要再次测试这个叶子方法,so,让叶子打桩实现返回结果,上层方法实际调用并测试。

?

?

mockito实现部分mock的两种方式:spy和callRealMethod()

spy实现

?

@Testpublic void callRealMethodTest() {Jerry jerry = mock(Jerry.class);doCallRealMethod().when(jerry).goHome();doCallRealMethod().when(jerry).doSomeThingB();jerry.goHome();verify(jerry).doSomeThingA();verify(jerry).doSomeThingB();}class Jerry {public void goHome() {doSomeThingA();doSomeThingB();}// real invoke it.public void doSomeThingB() {System.out.println("good day");}// auto mock method by mockitopublic void doSomeThingA() {System.out.println("you should not see this message.");}}
?

? ? 通过代码可以看出Jerry是一个mock对象,?goHome()和doSomeThingB()是使用了实际调用技术,而doSomeThingA()被mockito执行了默认的answer行为(这里是个void方法,so,什么也不干)。

?

总结:

? ? spy和callrealmethod都可以实现部分mock,唯一不同的是通过spy做的桩实现仍然会调用实际方法(我都怀疑这是不是作者的bug)。

? ?★ 批注:spy方法需要使用doReturn方法才不会调用实际方法。

?

? ? mock技术是实施TDD过程必备的装备,熟练掌握mockito(或者其他工具)可以更有效的进行测试。虽然mockito作者也觉得部分测试不是好的设计,但是在java这样一个不是完全面向对象技术的平台上,我们其实没必要过分纠结这些细节,简洁,可靠的代码才是我们需要的。

?

?

参考资料:

http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#1

?

--heipark

?

?

热点排行