PowerMock – 局部变量与方法

2017年10月22日 0 条评论 1.11k 次阅读 1 人点赞

引言

       Power Mock提供了强大的Mock能力,其中一个体现就是局部Mock变量,而一般情况下在做单元测试的时候我们无法触碰到局部变量。同时其也支持对私有方法、静态方法、final修饰方法的Mock。

Mock变量

Mock局部变量

为了更好的说明局部变量的Mock,需要对Dao层和Service层稍微做出一些修改:

Book

BookDao

BookService

BookServiceTestWithPowerMock

可以看到BookDao被成功Mock并且在BookService层的测试中也打印了我们期望的结果。

Mock方法

Mock静态方法

有时候代码中需要调用某个静态工具类指定的方法,如果这个方法非常复杂或者依赖了一些其他组件或者服务, 而我们希望”屏蔽”掉该函数的真实调用情况而代码能够继续运行下去, 那么可以对该静态方法进行Mock。为此我们需要对BookDao做出一些轻微的修改将其中的方法静态化以便我们进行测试。

BookDao

BookService

BookServiceTestWithPowerMock

Mock final修饰的方法

Book

BookDao

BookService

BookServiceTestWitPowerMock

Mock构造方法

构造方法分为有参构造和无参构造两种,分别使用:

PowerMockito.whenNew(X.class).withArguments().thenReturn(X instance)

PowerMockito.whenNew(X.class).withAnyArguments().thenReturn(X instance)或者PowerMockito.whenNew(X.class).withNoArguments().thenReturn(X instance)来实现:

Book

BookDao

BookService

BookServiceTestWitPowerMock

最后打印的BookService层方法信息,Book和BookDao实例信息分别为:

其实PowerMock在mock实例的过程中使用CGLIB进行代理,详细信息可以参考:https://github.com/cglib/cglib/wiki

Mock私有方法

BookService

BookServiceTestWitPowerMock

参考资料

 

 

重剑无锋,大巧不工。

文章评论(0)