`
tify
  • 浏览: 14626 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用Powermock和mockito测试静态方法

 
阅读更多

1. 加入依赖包(maven)

Xml代码收藏代码
  1. <dependency>
  2. <groupId>org.powermock</groupId>
  3. <artifactId>powermock-api-mockito</artifactId>
  4. <version>1.4.10</version>
  5. <scope>test</scope>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.powermock</groupId>
  9. <artifactId>powermock-module-junit4</artifactId>
  10. <version>1.4.10</version>
  11. <scope>test</scope>
  12. </dependency>

2. example

Java代码收藏代码
  1. classMyStringUtil{
  2. publicstaticStringuppercase(Strings){
  3. returns.toUpperCase();
  4. }
  5. }
  6. @RunWith(PowerMockRunner.class)//1
  7. @PrepareForTest({MyStringUtil.class})//2
  8. publicclassHelloTest{
  9. @Before
  10. publicvoidbefore(){
  11. PowerMockito.mockStatic(MyStringUtil.class);//3
  12. }
  13. @Test
  14. publicvoidtest()throwsIOException{
  15. PowerMockito.when(MyStringUtil.uppercase("abc")).thenReturn("ABC");//4
  16. assertEquals("ABC",MyStringUtil.uppercase("abc"));//5
  17. }
  18. }

① 标注使用PowerRunner运行test(powermock会修改字节码)

② 设置mock类(支持多个类,逗号分隔),这个可以设置到class上,也可以设置到method上。这里面包含两种类型:

  1. 被mock的类(如上例MyStringUtil.class,如果mock类为系统类,如System.class,则不需要这里设置就可以使用)
  2. context类,如果是在XxxServer里面希望mock MyStringUtil类,则要设置 XxxServer.class

③ 告诉powermock需要mock哪个类。(感觉这里配置和②有点重合)

④ 打桩,设置mock对象返回预期值。(测试mock方法还未执行)

⑤ 执行mock方法,返回预期值。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics