powermock mockito mock static

来源:互联网 发布:沉迷于网络的危害 编辑:程序博客网 时间:2024/04/30 12:47

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.   
  8. <dependency>  
  9.     <groupId>org.powermock</groupId>  
  10.     <artifactId>powermock-module-junit4</artifactId>  
  11.     <version>1.4.10</version>  
  12.     <scope>test</scope>  
  13. </dependency>  

 

2. example

 

Java代码  收藏代码
  1. class MyStringUtil {  
  2.   
  3.     public static String uppercase(String s) {  
  4.         return s.toUpperCase();  
  5.     }  
  6. }  
  7.   
  8. @RunWith(PowerMockRunner.class// 1  
  9. @PrepareForTest({ MyStringUtil.class }) // 2  
  10. public class HelloTest {  
  11.   
  12.     @Before  
  13.     public void before() {  
  14.         PowerMockito.mockStatic(MyStringUtil.class); // 3  
  15.     }  
  16.   
  17.     @Test  
  18.     public void test() throws IOException {  
  19.         PowerMockito.when(MyStringUtil.uppercase("abc")).thenReturn("ABC"); // 4  
  20.         assertEquals("ABC", MyStringUtil.uppercase("abc")); // 5  
  21.     }  
  22. }  

 

 

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

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

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

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

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

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

0 0