我们编写代码的时候,总会写一些工具类,为了方便调用喜欢使用static关键字来修饰对应方法。

那么现在举例说明,还是准备两个接口,第一个是查询学生总数,第二个是新增学生两个接口,具体示例代码如下:

package com.rongrong.powermock.mockstatic;

import com.rongrong.powermock.service.Student;

/**
* @author rongrong
* @version 1.0
* @date 2019/11/23 8:08
*/
public class StudentStaticService { /**
* 获取学生总数
* @return
*/
public int getStudentTotal(){
return StudentUtils.getStudent();
} /**
* 创建一个学生
* @param student
*/
public void createStudent(Student student){
StudentUtils.createStudent(student);
}
}

接着我们再来看看这个静态工具类StudentUtils,具体代码示例如下:

package com.rongrong.powermock.mockstatic;

import com.rongrong.powermock.service.Student;

/**
* @author rongrong
* @version 1.0
* @date 2019/11/23 7:38
*/
public class StudentUtils {
/**
* 获取学生总数
* @return
*/
public static int getStudent(){
throw new UnsupportedOperationException();
} /**
* 创建一个学生
* @param student
*/
public static void createStudent(Student student){
throw new UnsupportedOperationException();
}
}

接下来我们用传统方式,来做单元测试,示例代码如下:

    @Test
public void testGetStudnetTotal(){
StudentStaticService staticService = new StudentStaticService();
int studentTotal = staticService.getStudentTotal();
assertEquals(studentTotal,10);
} @Test
public void testCreateStudent(){
StudentStaticService staticService = new StudentStaticService();
staticService.createStudent(new Student());
assertTrue(true);
}

接着运行下测试用例,结果肯定报错了,为什么报错,这里就不再细说了,参考之前文章,报错,如下图所示:

接下来我们使用powermock来进行测试,具体示例代码如下:

 @Test
public void testGetStudentWithMock(){
//先mock工具类对象
PowerMockito.mockStatic(StudentUtils.class);
//模拟静态类调用
PowerMockito.when(StudentUtils.getStudent()).thenReturn(10);
//构建service
StudentStaticService service = new StudentStaticService();
int studentTotal = service.getStudentTotal();
assertEquals(10,studentTotal);
} @Test
public void testCreateStudentWithMock(){
//先模拟静态工具类
PowerMockito.mockStatic(StudentUtils.class);
//模拟调用
PowerMockito.doNothing().when(StudentUtils.class);
//构建service
StudentStaticService service = new StudentStaticService();
Student student = new Student();
service.createStudent(student);
//这里用powermock来验证,而不是mock,更体现了powermock的强大
PowerMockito.verifyStatic();
}

再次运行,测试通过,如下图所示:

运行之前先让powermock为我们准备了StudentUtils工具类,而且采用mockstatic的方法,最后我们用powermock.verifyStatic()验证,而不是mock,更体现了powermock的强大。

PowerMock学习(四)之Mock static的使用的更多相关文章

  1. PowerMock学习(十一)之Mock private methods的使用

    Mock  private methods 就是mock私有方法啦,学到这不难发现,我们其实大部分都是通过反射去完成单元测试的,但是在实际中,某个类中的私有方法,个人不建议使用反射来测试,因为有时候会 ...

  2. PowerMock学习(八)之Mock Argument Matcher的使用

    前言 本计划在上周六日将powermock学完,并同步到博客中,结果自己没经得住诱惑,又开始去打王者荣耀了.虽然两天时间我从钻石一升到了星耀V四星,但是我并没有觉得很开心,相反很失落呢.不得不说腾讯的 ...

  3. PowerMock学习(三)之Mock局部变量

    编写powermock用例步骤: 类上面先写这两个注解@RunWith(PowerMockRunner.class).@PrepareForTest(StudentService.class) 先模拟 ...

  4. PowerMock学习(七)之Mock Constructor的使用

    前言 我们在编码的时候,总习惯在构造器中传参数,那么在powermock中是怎么模拟带参数构造的呢,这并不难. 模拟场景 我们先模拟这样一个场景,通过dao中的传入一个是布尔类型(是否加载)和一个枚举 ...

  5. PowerMock学习(九)之Mock Answer的使用

    关于Mock Answer 上一篇文章,有介绍过关于Arguments Matche的使用,其实 Answer的作用与其比较类似,但是它比 Arguments Matcher 更加强大. Argume ...

  6. 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

    本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...

  7. mock static方法

    <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mock ...

  8. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

  9. PowerMock学习之PoweMock的入门(二)

    前言 在上一篇<PowerMock学习之PoweMock的入门(一)>文章中,已经简单提及一些关于powermock的用法,但是入门还未完,我还要坚持把它学习并坚持更新到博客中. Mock ...

  10. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

随机推荐

  1. 【Labview入门】将输入度数转换为3位精度弧度值

    Labview版本2015 程序如下: 可以右键输出控件选择属性来调整输出的小数位数: 运行结果:

  2. java源码解析

    String深入解析 String具有不变性的原因: String被final修饰,它不可能被继承,也就是任何对String的操作方法,都不会被继承覆写 String中保存数据的是一个char数组的v ...

  3. postman-windows下newman的使用

    一.newman的安装 1.安装node.js下载https://nodejs.org/en/ C:\Users\iphauser>node -vv10.16.1C:\Users\iphause ...

  4. LeetCode122——Best Time to Buy and Sell Stock II

    题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  5. 判断一字串String中是否包含某一串字符串

    String ostype = data.getString("osType").toUpperCase(); //转换为大写 if (ostype.contains(" ...

  6. NetworkManager网络通讯_破产版NetworkManager(五)

    根据对NetWorkServer 以及NetworkClient的理解,编写一个简易版的NetWork Manager.惯例全部代码放在最后 (一)NetWorkServer与NetworkClien ...

  7. (三)Kinect姿势识别

    Kinect给我们内置了许多姿势如举手等,具体可参考枚举KinectGestures.Gestures,也可以通过Kinect姿势管理器,自定义姿势导入(坑较多,内置的基本够用了)也可以根据关节坐标自 ...

  8. fenby C语言P24

    #include <stdio.h> int main(){ char cArr[]={'I','L','O','V','E','C'}; char sArr[]="ilovec ...

  9. R语言:绘制知识图谱

    知识图谱主要是通过将应用数学,图形学,信息可视化技术,信息科学等学科的理论与方法与计量学引文分析.共现分析等方法结合,利用可视化的图谱形象地展示学科的核心结构.发展历史.前沿领域以及整体知识架构达到多 ...

  10. 在ArangoDB中实现connectedcomponents算法

    操作环境: tool:ArangoDB 3.3.13 操作系统:Debian 7.2.0-20 概念: Connected Components即连通体算法.用id标注图中每个连通体,将连通体中序号最 ...