Powermock私有方法

【测试用例】如何解决UT中对private构造方法进行Mock时不能用new去创建对象 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。 阅读详情

简单笔记下,如有以下待测方法callSumXX,其调用了private方法sumXX

可以直接mock掉callSumXX,传送门:Mockito在Maven junit测试中的应用

如果方法中还有其他待测逻辑等原因不能直接mock掉的话,这里就需要去mock被调用的private方法。

public class Calculator {
    private int sumXX(int a, int b) {
		return a + b;
	}
    
    public int callSumXX(int a, int b){
    	return sumXX(a, b);
    }
}

1.powermock private method的方法

spy被测类:
Calculator powerMock = PowerMockito.spy(new Calculator());

构造返回:
PowerMockito.when(powerMock, "sumXX", 1, 2).thenReturn(2);

断言:
assertEquals(2, powerMock.callSumXX(1, 2));

完整代码如下:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Calculator.class})
public class CalculatorTest {
	
	private Calculator test;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		test = new Calculator();
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testSumXX() throws Exception {
		Calculator powerMock = PowerMockito.spy(new Calculator());
		PowerMockito.when(powerMock, "sumXX", 1, 2).thenReturn(2);
		assertEquals(2, powerMock.callSumXX(1, 2));
	}
}

测试发现pass了


说明private方法sumXX被成功mock(1+2=2)

2.需要注意的几个问题

a.需要加入@RunWith和@PrepareForTest,见上面的完整代码

b.PowerMockito需要配合Mockito使用,这里版本有对应关系要求:
Mockito                     | PowerMock
------------------------------------------------------------------------------
2.0.0-beta - 2.0.42-beta    |   1.6.5+
------------------------------------------------------------------------------
1.10.19                     |   1.6.4
1.10.8 - 1.10.x             |   1.6.2+
1.9.5-rc1 - 1.9.5           |   1.5.0 - 1.5.6
1.9.0-rc1 & 1.9.0           |   1.4.10 - 1.4.12
1.8.5                       |   1.3.9 - 1.4.9
1.8.4                       |   1.3.7 & 1.3.8
1.8.3                       |   1.3.6
1.8.1 & 1.8.2               |   1.3.5
1.8                         |   1.3
1.7                         |   1.2.5
否则可能出现错误如:
java.lang.NoSuchMethodError:org.mockito.internal.creation.MockSettingsImpl.setMockName(Lorg/mockito/mock/MockName;)Lorg/mockito/internal/creation/settings/CreationSettings

c.maven中powermock的引入:
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <powermock.version>1.6.4</powermock.version>
  </properties>
	<dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
   </dependency>


【Java】使用PowerMockito mock static方法/new对象/mock对象的public或private方法的简单示例 PowerMockito简单实战,帮助编写测试用例。 阅读详情

相关推荐

利用PowerMock模拟静态方法和私有方法的示例

本示例程序利用PowerMock演示了如何对静态方法和私有方法进行单元测试(其它模拟单元测试技术无法实现)。

PowerMock使用-Mock私有方法

本篇文章将说明如何使用PowerMock对私有方法进行Mock。

用朴素的话说技术。 1万+

Java黑皮书课后题第5章:*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生

*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生名字、次高分的学生名字题目题目概述next()读取一个字符与nextLine()读取一行破题代码 题目 题目概述 *5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生名字、次高分的学生名字 使用Scanner类的next()方法而不是nextLine()方法来读取名字 next()读取一个字符与nextLine()读取一行 举个例子理

weixin_46356698的博客 2154

powermockito测试私有方法

为什么要写单元测试?单元测试可以减少bug率,提升代码的质量,还可以通过单元测试来熟悉业务;有些公司可能还会强制要求,每次新增代码、或者变更代码单测覆盖率要达到多少比例才能申请代码合并。

qq_35932990的博客 3326

从标记基因到功能分析:手把手教你人工注释单细胞亚群的完整流程

本文详细介绍了人工注释单细胞亚群的完整流程,从标记基因筛选到功能分析验证,特别针对肿瘤微环境、发育轨迹等复杂场景提供解决方案。通过差异表达分析、多维数据整合和实验验证,帮助研究者准确识别细胞类型,提升单细胞转录组研究的生物学解读深度。

jenkins8butler的博客 244

无监督学习初探:K-Means聚类与主成分分析(PCA)

K-Means适用于快速分组,但对数据分布敏感,可结合轮廓系数评估质量。PCA通过特征值分解实现线性降维,需注意非线性场景的替代方案(如UMAP)。进阶方向:聚类:谱聚类、高斯混合模型(GMM)处理复杂形状。降维:t-SNE、自编码器处理非线性结构。

weixin_69882801的博客 1453

PowerMock Mock 私有方法

– Start 假设我们有如下类。 package demo02; import java.util.Arrays; import java.util.List; public class BusinessService { public List<String> getAllUser() { // 调用 private 方法 return users(); } ...

千里之行始于足下 8119

VSCode玩转ESP-ADF音频开发:从环境搭建到成功播放MP3的避坑全流程

本文详细介绍了如何在VSCode环境下使用ESP-ADF框架进行ESP32音频开发,从环境搭建到成功播放MP3的全流程。重点解析了`IDF_PATH`和`ADF_PATH`的配置问题,以及如何解决`xTaskCreateRestrictedPinnedToCore`等常见编译错误,帮助开发者快速上手ESP-ADF音频开发。

weixin_42520909的博客 339

powermock跳过某方法_使用Powermock对私有方法进行mock

在public方法中往往会调用一些private方法,如果private方法很复杂,我们就需要处理很多方法的mock。如果这时只想要测试public方法,并不想关注private方法的逻辑,那么就需要对private方法进行mock。下面我们简单介绍下如何通过Powermock来对私有方法进行mock。被测试类:public class MockPrivateClass {public Strin...

weixin_42641741的博客 6212

Windows10 Qt下用MINGW 编译VTK-8.1.0

1. 材料准备(1) 下载VTK-8.1.0: https://www.vtk.org/download/(2) 下载TIFF库: http://gnuwin32.sourceforge.net/packages/tiff.htm(直接安装即可,注意选择路径不包含中文字符)2. 安装: (1) cmake配置: a. Module下配置:勾选下图所示的六项 b. Build 配置:勾选这里能够在b...

hit1524468的专栏 3891

brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。 brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。 1.使用 // bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

华秋实的专栏 1851

PowerMock 测试私有方法

– Start 假设我们有如下类。 package demo03; public class BusinessService { private int max(int a, int b) { return a > b ? a : b; } } 下面我们看看如何测试私有方法。 package demo03; import org.junit.Assert; import ...

千里之行始于足下 9311

TwinCAT3 Modbus-TCP Client/Server使用

/起始地址是12289//起始地址是12294。

panjinliang066333的博客 7732

powermock私有字段_使用PowerMock的EasyMock私有方法模拟

powermock私有字段Sometimes we want to test a method that is using a private method. We can create the mock object using EasyMock but EasyMock doesn’t allow us to mock private methods. So we can use PowerM...

从零开始的教程世界 1006

【WireShark】WireShark windows平台编译 问题解决

最近工作中需要基于wireshark做二次开发,在windows平台构建过程中 遇到了找不到Glib库的问题,具体报错如下: Working in D:\WorkSpace\WIRESHARK\wiresharksource\wireshark-win64-libs Tag 2021-08-14 not found. Refreshing. Downloading https://anonsvn.wireshark.org/wireshark-win64-libs/tags/2021-08-14/pac

qq_35456540的博客 1543

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PowerMock测试私有方法和属性

第一章 PowerMock单元模拟测试框架简介 第二章 PowerMock模拟功能异常 在实际工作中是否碰到,当某些方法或属性定为私有的,是比较重要的功能点需要用单元测试验证。在不改变代码的情况下,如何验证?对了,使用PowerMock轻松解决。PowerMock的诞生就为了解决其他单元测试框架不能解决的问题。工作中多做本地单元测试,可以有效提前发现问题并及时处理,最后做到每个功能"0"bug,代码的质量也有了保障。这段时间连续发了几遍关于PowerMock文章,是个人学习的总结分享,而学PowerMo

6516

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PowerMock使用-Mock静态私有方法

本篇文章将说明如何使用PowerMock对静态私有方法进行Mock。

用朴素的话说技术。 3120

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

powermock跳过某方法_无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类...

1、为什么要用mock我的一本书的解释:(1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据(2)调用第三方API接口,测试很慢,(3)编写满足所有外部依赖的测试可能很复杂,复杂到不值得编写,Mock模拟内部或外部依赖可以帮助我们解决这些问题另一本TDD书的解释:(1)对象的结果不确定,如每获取当前时间,得到的结果都不一样,无法符合我们的预期;(2)实现这个接口的对象不存在;(...

weixin_35762258的博客 3790

powermock跳过某方法_使用PowerMock模拟私有方法,但仍会调用底层方法

I am trying to mocking to mock out a private method that is making a JNDI call. When that method gets called from a unit test, it throws an exception^. I would like to mock-out that method for testing...

weixin_32821913的博客 990

PowerMock使用-Spy私有方法

本篇文章将说明如何使用PowerMock对私有方法进行Spy。

用朴素的话说技术。 1055

PowerMock类的私有属性和方法

项目的单元测试经常会对某一些类的私有属性和私有方法进行mock,这个时候powerMock可以胜任这个任务。 maven 依赖的pom <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-...

u012061196的博客 9728

PowerMock私有方法的简单尝试

公司的代码都要设计到代码测试的覆盖率的问题,简单的测试工作还是可以的但是在处理私有方法的时候以前的都是直接测到方法内存,凭空多出了好多代码量。 这里找到了一中比较巧妙的方法感觉还不错。 代码如下: package powermock; import java.util.Random; public class CodeWithPrivateMethod { public vo...

不会划水猴子的博客 4981

powermock模拟私有方法

在单元测试中,有时候需要模拟一个类的私有方法,powermock提供了这样的功能 以下是要测试的类 public class CalcService { public int increase(int i){ return i+j(i); } private int j(Integer j){ ...

zk1878的专栏 1389

使用PowerMock模拟私有字段和私有方法

要模拟的类:public class PrivateObject { private String privateString; public PrivateObject(String privateString) { this.privateString = privateString; } private String getPrivateString() { re

Viking的博客 2万+

java mock私有方法_使用PowerMock模拟了私有方法,但是仍然调用了底层方法

我正在尝试模拟一个进行JNDI调用的私有方法。从单元测试中调用该方法时,它将引发异常^。我想模拟该方法用于测试目的。我使用了另一个问题answer中的示例代码,并且在测试通过时,似乎仍在调用底层方法。我System.err.println()在doTheGamble()方法中插入,然后将其打印到控制台。有趣的是,如果我将第一个注释掉assertThat,则测试通过。?:(那么,我如何模拟出一个私有...

weixin_39740283的博客 1066

Java一分钟之-PowerMock:静态方法与私有方法测试

在Java单元测试的领域,PowerMock是一个扩展了Mockito功能的框架,它使得开发者能够模拟静态方法、构造函数、私有方法和final类,从而在测试中进一步隔离依赖项,达到更高的测试覆盖率。本文将深入浅出地介绍PowerMock的核心应用场景、常见问题、易错点以及如何避免这些问题,并通过实际代码示例加以说明。

zevjay的博客 3128
上一篇: Mockito在Maven junit测试中的应用
下一篇: android studio Instrumented tests代码覆盖率获取方法
ronniewy
博客等级 码龄15年 0粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值