使用Powermock和mockito测试静态方法

2022-07-09 12:19:24

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方法,返回预期值。

  • 作者:wanghuuuijuan
  • 原文链接:https://blog.csdn.net/wanghuuuijuan/article/details/84653137
    更新时间:2022-07-09 12:19:24