PowerMock + Mockito

Writing unit tests can be hard and sometimes good design has to be sacrificed for the sole purpose of testability.

Often testability corresponds to good design, but this is not always the case.

For example final classes and methods cannot be used, private methods sometimes need to be protected or unnecessarily moved to a collaborator, static methods should be avoided completely and so on simply because of the limitations of existing frameworks.


PowerMock is a framework that extend other mock libraries such as PowerMock with more powerful capabilities.

 

Write a test like this:

@RunWith(PowerMockRunner.class)
@PrepareForTest( { YourClassWithEgStaticMethod.class })
public class YourTestCase {
      ...
}

 

一个读取文本文件字符的Tools:

package wei.peng.easymock;

import java.io.BufferedReader;
import java.io.FileReader;

/**
 * 逐行读取文本文件,计算字符数
 * @author WPeng
 */
public class BeMockObject2 {
	int resultNum = 0;
	
	public int getCharNum(){
		try {
			String pathStr = "c:/test.txt";
			
			//创建FileReader对象,用来读取字符流
			FileReader fileReader = new FileReader(pathStr);
			//缓冲指定文件的输入
			BufferedReader bufferReader = new BufferedReader(fileReader);
			
			//一行一行读
			while (bufferReader.ready()) {
				String line = bufferReader.readLine();
				resultNum += line.length();
			}
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		return resultNum; 
	}
}

 PowerMock + Mockito测试:

package wei.peng.easymock;

import junit.framework.TestCase;
import static org.mockito.Mockito.when;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

/**
 * @author WPeng
 */
@RunWith(PowerMockRunner.class)
@PrepareForTest(BeMockObject2.class)
public class MockitoTest extends TestCase {

	@Mock
	BeMockObject2 beMockObject2;

	@Before
	public void init() {
		MockitoAnnotations.initMocks(this);
	}

	public void testGetRecordNum() {
		int expected = 100;
		when(beMockObject2.getCharNum()).thenReturn(100);

		assertEquals(expected, beMockObject2.getCharNum());
	}

}
单元测试篇之Mockito+PowerMock 本篇文章旨在介绍单元测试的基本概念,介绍如何使用Mockito+PowerMock进行单元测试,对开发中坏代码进行预检测。在实际开发中,如果我们想保证代码的高质量,那必然需要写大量单元测试,需要对代码的各类各行及各分支覆盖的非常全面,而伴随而来的是我们又会面临代码在提交合并跑流水线的时间过长等问题,因此后续的文章将介绍一些涉及到单元测试的效率问题和其优化方法。 阅读详情

相关推荐

powermockito教程_Mockito和PowerMock用法

Mockito和PowerMock用法一、mock测试和Mock对象mock对象就是在调试期间用来作为真实对象的替代品mock测试就是在测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法就叫mock测试二、Mockito和PowerMock​ PowerMock是Java开发中的一种Mock框架,用于单元模块测试。当你想要测试一个service接口,但servic...

weixin_34638282的博客 4144

自动生成mock简单的测试

package com.areyoo.lok.controller; import com.areyoo.lok.vo.TestTwoVo; import java.lang.reflect.*; import java.util.HashSet; import java.util.ArrayList; import com.alibaba.fastjson.JSON; import com.areyoo.lok.service.api.WwService; import com.areyoo.lok.

erlanp的专栏 1561

powermock-mockito-demo:使用springboot的powermock-mockito-demo

powermock-mockito-demo powermock-mockito-demo with springboot 使用在springboot项目中使用powermock-mockito进行单元测试,演示mock static、private、whenNew、exception的测试。 注意 示例使用spring-boot 2.0.3.RELEASE 它间接引用 junit-4.12 mockito-core-2.15.0 但是官网powermock 1.7.x只支持2.8.0-2.8.9,如果使用默认引入版本,会出现找不到某些方法的异常. 需要自定义mockito-core为相应版本。 ServiceAspect只是为了验证当spy实体在被代理的情况下powermockito是否还会生效。 1、ServiceAspect没有被注释,userService为代理对象,testPr

java mockito respose_java – Mockito:如何在另一个方法中调用mock方法

我是mockito的新手,我正在使用mockito来测试调用另一个方法的方法,并且调用方法返回字符串.我试过但我无法写测试.请帮忙public class MyClass {protected String processIncominData(String input) {String request = ...;...String response = forwardRequest(reque...

weixin_32310195的博客 1202

告别 RPA 和 Selenium,MCP + Playwright 成为自动化开发新宠!

摘要: 随着数字化转型加速,传统自动化工具(如RPA和Selenium)在复杂场景中暴露出开发成本高、灵活性不足等问题。新一代解决方案MCP(Model Context Protocol)与Playwright的结合,通过AI与自动化的无缝对接,实现了智能化的任务处理。MCP支持自然语言交互和上下文感知,开发者无需编写复杂代码即可生成自动化脚本;Playwright则提供多浏览器支持、高性能和易用性。二者结合显著提升开发效率,使自动化更智能、灵活。文章还对比了VS Code与Trae中配置Playwrigh

我先测了 2209

QGIS v3.28 高效加载OSM在线地图的三种实用方法

本文详细介绍了在QGIS v3.28中高效加载OSM在线地图的三种实用方法:通过XYZ Tiles直接连接、使用QuickMapServices插件以及配置WMS/WTMS服务。针对每种方法提供了具体操作步骤、常见问题解决方案和性能优化建议,帮助用户根据需求选择最适合的方案,提升GIS工作效率。

weixin_29233333的博客 434

小测试-BufferedReader之readLine

今天写程序的时候测试了一下,如果在System.in中直接press的是回车,BufferedReader对象的readLine()读取的是什么呢? import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; pu

mantou0611的专栏 617

PX4自定义uORB消息与MAVLink消息映射实战:从飞控到QGC地面站完整流程解析

本文详细解析PX4飞控中自定义uORB消息与MAVLink消息映射的完整流程,涵盖从飞控内部消息定义、MAVLink消息创建到QGC地面站接收显示的全链路实践。重点介绍如何使用mavlink inspector工具进行调试,解决版本兼容性和多实例消息处理等常见问题,为无人机开发者提供可靠的实时数据监控方案。

ll5678的博客 1068

java方法里的变量怎么mock_Java_UT_Mock系列之-05Powermock与临时变量

测试场景在测试过程中,发现我们的开发同学喜欢在方法中临时new 出一些类来完成某项工作。由于局部变量用完立即销毁了,使用起来也就非常灵活和随意了。但这样就对单元测试造成了不小的麻烦。 如以下的案例import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io...

weixin_30021053的博客 2394

手把手教你用YOLOv5和OpenCV实现DNF全自动刷图(含自动拾取与Boss战逻辑)

本文详细介绍了如何使用YOLOv5和OpenCV构建DNF全自动刷图系统,包括环境配置、游戏画面采集、目标检测、场景导航及操作控制等核心模块。通过实战案例,帮助开发者掌握游戏自动化技术,实现自动拾取与Boss战逻辑,提升游戏效率。

weixin_42628941的博客 451

R语言环境下Bibliometrix与Biblioshiny的安装与配置指南

本文提供了在R语言环境下安装与配置Bibliometrix和Biblioshiny的详细指南。内容涵盖R与RStudio的安装、Bibliometrix包的安装避坑方法,以及如何启动Biblioshiny图形界面进行文献计量分析。重点解决了安装过程中的常见网络与依赖问题,帮助科研人员快速搭建高效的文献分析环境。

jwt8token的博客 1147

60.安心技术梳理 - 配置文件Mock数据解析至对象集合联调工具类-干货

1.工具类 private String getFileContent(String fileName) { String path = this.getClass().getClassLoader().getResource("").getPath().toString(); String filePath = path.substring(1) + fileN...

majunzhu的博客 359

基于近场动力学的二维疲劳裂纹扩展模型_近场动力学数值模拟的程序实现(1)——引言...

参考书目W. H. Gerstle. 2015. Introduction to Practical Peridynamic: Computational Solid Mechanics Without Stress and Strain.E.Madenci, A.Barut, M.Dorduncu. Peridynamic Differential Operator for Numerical ...

weixin_39764603的博客 1203

Mockito与 PowerMock 版本对应关系

mockito与powermock 版本对应关系 java.lang.ClassNotFoundException: org.mockito.exceptions.Reporter powermock-api-mockito 与 powermock-api-mockito2

白衣若尘的博客 1万+

Obsidian笔记同步实战:基于Git的私有化部署与自动化管理

本文详细介绍了如何利用Git为Obsidian笔记构建私有化、自动化且免费的同步方案。通过安装配置Git与Obsidian-git插件,结合Gitee等远程仓库,实现笔记的版本管理、多设备同步与自动备份,打造安全可靠的知识管理体系。

y7z8a的博客 272

4、基于抽象解释的静态分析器中的跟踪分区与ASTRÉE分析器解析

本博客探讨了基于抽象解释的静态分析器中的跟踪分区技术,并深入解析了ASTRÉE分析器的工作原理和应用。通过示例程序说明了跟踪分区如何提升分析精度,减少误报,以及ASTRÉE如何利用多种数值抽象域(如八角形域、浮点区间线性形式等)来处理复杂的嵌入式C程序。此外,还讨论了ASTRÉE的模块化设计、循环展开优化、用户断言与自动细化的局限性等内容,为保障嵌入式软件的安全性和可靠性提供了理论与实践支持。

kotlin6android的博客 117

Mockito & PowerMock详解

为什么要mock Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。 如下使用范畴 真实对象具有不可确定的行为,产生不可预测的效果,(如:股票行情,天气预报) 真实...

赵英超的博客 4480

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Mockito和PowerMock的用法及对比

** Mockito和PowerMock的用法及对比 ** 概述 在单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:外部服务可能无法在单元测试的环境中正常工作,因为它们可能需要访问数据库或者使用一些其它的外部系统。我们的测试关注点在于这个类的实现上,外部类的一些行为可能会影响到我们对本类的测试,那也就失去了我们进行单测的意义。 一、mock测试和Mock对象 mock对象就是在调试期间用来作为真实对象的替代

q15195990655的博客 6593

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

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

springboot集成mockito与powermock

  mockito大家都比较熟悉了,存在或者不存在,都不要紧,mockito让你有一种只要一出手,就知道有没有的感觉。但是它也不是万能的,比如静态方法、私有方法,它就无能为力了。这是为什么呢?当然不是mockito的框架或现有技术解决不了,而是出于某些原因或立场,比如测试理念观点。甚至在mockito的FAQ中,作者明确了每一项未实现的功能不支持的原因,或者干脆说已经有别的工具实现了,需...

diefen3773的博客 1970

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...

powerMock和mockito使用

powerMock和mockito powermock和mockito都是做mock的框架,powermock在mockito的基础上扩展而来,支持mockito的操作(也支持别的mock框架比如easyMock)。因此在maven引入powermock的时候,需要引mockito的包。powermock和mockito版本上要配合着使用。powermock在mockito的基础上,扩展了对static class, final class,constructor,private method等的mock

xiaokanfuchen86的博客 3791

Mockito和Powermock的版本兼容

最近开始使用Mockito和Powermock,但是却遇到的两者的版本兼容问题,查询了Powermock在google code的wiki后, 找到版本对照表: Mockito PowerMock 1.10.8+ 1.6.2+ 1.9.5-rc1 - 1.9.5 1.5.0 ...

chuogaochou5945的博客 3002

Mockito PowerMock 的demo示例及踩坑记录

Mockito、PowerMock 的demo示例 Mockito 和 PowerMock的实现原理 Mockito、PowerMock的踩坑记录

白衣若尘的博客 6118

Mockito+PowerMock 总结

1, 系统启动的异常日志如下 javax.net.ssl.* Caused by: java.security.NoSuchAlgorithmException: class configured for SSLContext: sun.security.ssl.SSLContextImpl$TLSContext not a SSLContext 解决: 添加 @PowerMockIgnor...

jxx_1_112136的博客 2875

Java 单元测试Mockito与PowerMock

Mockito是 Java 单元测试的“标配”工具,专注于模拟常规依赖(接口、普通类),通过@Mock简化依赖隔离,核心能力包括模拟行为、验证调用、捕获参数。PowerMock作为补充,解决 Mockito 无法处理的场景(静态方法、私有方法、构造函数),但需谨慎使用(避免掩盖代码设计问题)。掌握这两个工具,可有效隔离复杂依赖,聚焦被测试单元的逻辑验证,大幅提升单元测试的覆盖率和可靠性,是保障代码质量的核心手段。以下是Java中使用Mockito进行单元测试的实际场景案例。

一叶之秋的博客 1817

mockito , jmockit ,PowerMock

1. mockito (1) org.mockito mockito-core 2.7.12 test (2) init 类前@RunWith(MockitoJUnitRunner.class) 或者 @Before public void initMocks() { MockitoAnnotations.initMocks(this); } (3) 注解 @Mock 该对象所有的方法被置空,...

hui1350的博客 1729
上一篇: EasyMock
下一篇: Maven 介绍
pengwei1221
博客等级 码龄16年 1粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值