我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Powermock静态方法怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Powermock静态方法怎么使用

本篇内容主要讲解“Powermock静态方法怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Powermock静态方法怎么使用”吧!

Mockito 很强大, 但是它不支持静态方法.所以, 就用Powermock了. 要测试的对象是Controller中的接口, 对单元测试来说, 这个待测试的街口应该是一个白盒的. 所以, 其中的第三方(service,其他静态类)的调用都应该使用mock对象来stub起来. 下面是## 示例代码(随手写的,说明问题就行):

Controller:  

@Controllerpublic class MainController {    @Autowired    private MainService mainService;    @GetMapping("/hello")    public String hello(){        mainService.hello();        String result = HelloUtil.hi();        if(result.equals("hi")){            return "ok";        }else {            return "fail";        }    }}

Service:

@Service public class MainService {    public String hello(){        System.out.println("hello");        return "hello";    }}Util静态类:  ```javapublic class HelloUtil {    public static String hi(){        return "hi";    }}

我们要测试的是MainController中的hello方法.

再次注意, 是hello方法,不是hello接口.  我们的测试类:

@RunWith(PowerMockRunner.class)@PrepareForTest(HelloUtil.class)public class MainControllerTest {    [@Mock](https://my.oschina.net/mock)    private MainService mainService;    @InjectMocks    private MainController mainController;    [@Test](https://my.oschina.net/azibug)    public void helloTest(){        PowerMockito.when(mainService.hello()).thenReturn("hello");        PowerMockito.mockStatic(HelloUtil.class);        PowerMockito.when(HelloUtil.hi()).thenReturn("hi");        HelloUtil.hi();        HelloUtil.hi();        String result = mainController.hello();        PowerMockito.verifyStatic(Mockito.times(3));        HelloUtil.hi();        HelloUtil.hi();        HelloUtil.hi();     // mainController.hello();        assertEquals(result, "ok");    }}

我们着重看的是上面的HelloUtil.hi()方法.

PowerMockito.verifyStatic(Mockito.times(3));

先说下这句的意思, 这句(后面简称静态校验)就是对静态方法的调用次数做了校验. 光看命名就能想通. 但是要注意的是, 这里的3指的是在静态校验之前的调用次数. 如果静态校验执行的次数不等于这个次数, 那么静态校验后面的静态方法就不能再执行了. 上面代码中, 在这句前一共执行了三次HelloUtil.hi(); 两次是主动明文执行的, 一次是在mainController.hello()里面执行的. 如果注释掉某一个, 那么就会看到日志打印:

org.mockito.exceptions.verification.TooLittleActualInvocations: cn.com.hanbinit.utils.HelloUtil.hi();Wanted 3 times but was 2 times.

这里只校验静态校验之前的执行次数, 后面执行多少次都没关系. 另外, 还有一点要注意的是, 在校验语句前, 我们前面给方法mock的返回值是有效的, 在校验之后就没效果了. 
所以, 我们对静态方法的测试, 应该是放在verifyStatis之前进行的.  在校验之后的执行, 是为了证明我们之前的校验是ok的.

校验之后的静态方法调用, 是一定要有的. 要不然是测试不出调用次数的. 参见下面代码:

@Test    public void helloTest(){        PowerMockito.when(mainService.hello()).thenReturn("hello");        PowerMockito.mockStatic(HelloUtil.class);        PowerMockito.when(HelloUtil.hi()).thenReturn("hi");        String result = HelloUtil.hi();        String hi = HelloUtil.hi();        PowerMockito.verifyStatic(Mockito.times(4));        assertEquals(result, "hi");    }

像上面这段代码, 测试是通过的.  改成下面这样:

@Test    public void helloTest(){        PowerMockito.when(mainService.hello()).thenReturn("hello");        PowerMockito.mockStatic(HelloUtil.class);        PowerMockito.when(HelloUtil.hi()).thenReturn("hi");        String result = HelloUtil.hi();        String hi = HelloUtil.hi();        PowerMockito.verifyStatic(Mockito.times(4));        HelloUtil.hi();        assertEquals(result, "hi");    }

就能看到日志:

org.mockito.exceptions.verification.TooLittleActualInvocations: cn.com.hanbinit.utils.HelloUtil.hi();Wanted 4 times but was 2 times.

所以, 对静态方法调用次数的校验一定是verifyStatis和之后的显示调用一起来进行的. 最后的最后, 再提一句:  如果同时有多个静态方法调用. 如果都要验证调用次数, 那么应该分别像下面这样使用多次:

PowerMockito.verifyStatic(Mockito.times(4));HelloUtil.hi();

到此,相信大家对“Powermock静态方法怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Powermock静态方法怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Powermock静态方法怎么使用

本篇内容主要讲解“Powermock静态方法怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Powermock静态方法怎么使用”吧!Mockito 很强大, 但是它不支持静态方法.所以,
2023-06-04

如何使用PowerMock来Mock静态函数

这篇文章主要介绍如何使用PowerMock来Mock静态函数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!EasyMock和Mockito等框架,对static, final, private方法均是不能mock的。
2023-06-17

C#的静态方法怎么使用

这篇文章主要介绍“C#的静态方法怎么使用”,在日常操作中,相信很多人在C#的静态方法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#的静态方法怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-30

php中的静态方法怎么使用

这篇“php中的静态方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中的静态方法怎么使用”文章吧。一、什么是
2023-07-05

php的static静态方法怎么使用

本文小编为大家详细介绍“php的static静态方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“php的static静态方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php static静
2023-07-04

怎么在java中使用静态方法

本篇文章为大家展示了怎么在java中使用静态方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列
2023-06-14

php中静态方法怎么访问非静态方法

本篇内容主要讲解“php中静态方法怎么访问非静态方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中静态方法怎么访问非静态方法”吧!PHP中静态方法可以访问非静态方法;可以先实例化对象,然
2023-06-29

Java中的静态字段和静态方法怎么用

这篇文章主要介绍了Java中的静态字段和静态方法怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先看看下面这一串代码:public class Main { pub
2023-06-29

c#静态方法怎么调用

如何在 c# 中调用静态方法?定义使用 static 修饰符的静态方法。直接调用类名.方法名(),无需实例化类。可传入参数,语法为类名.方法名(params type[] parameters)。静态方法可返回各种数据类型,指定返回类型的方
c#静态方法怎么调用
2024-05-14

c#怎么调用静态方法

在 c# 中,调用静态方法可以通过两种方式:1. 使用类名直接调用;2. 使用类型名称 + 双冒号调用。如何在 C# 中调用静态方法什么是静态方法?静态方法是不属于任何特定对象实例的方法,而是属于类本身。它们使用 static 关键字来
c#怎么调用静态方法
2024-05-12

php中的静态属性和静态方法怎么用

这篇文章主要介绍“php中的静态属性和静态方法怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php中的静态属性和静态方法怎么用”文章能帮助大家解决问题。在php中,通过static关键字修饰的
2023-06-26

Python中静态方法,类方法,属性方法怎么使用

本篇内容介绍了“Python中静态方法,类方法,属性方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.静态方法通过@static
2023-06-30

php如何使用静态方法

本篇内容介绍了“php如何使用静态方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在php中,通过static关键字修饰的成员方法被称为静
2023-06-20

php为什么要使用静态方法

在PHP中,使用静态方法是因为不需要所在类被实例化就可以直接使用,静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存,并且静态方法效率上要比实例化高。
2015-09-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录