JMockit简单使用

JMockit从入门到实战 目录JMockit简介作用注解介绍@Mocked@Injectable@TestedJMockit实战 声明:该文档参考资料JMockit中文网 JMockit简介 Mock工具的一种(关于Mock思想的介绍) (点击此处,了解为什么使用JMockit) 作用 为了方便实现Mock 注解介绍 @Mocked @Injectable @Tested JMockit实战 测试Service层代码 ... 阅读详情
JMockit是google code上面的一个java单元测试的mock框架。


JMockit涉及到的元素介绍:

@Tested和@Injectable
     对@Tested对象判断是否为null,是则通过合适构造器初始化, @Injectable的实例会自动注入到@Tested中。

@Mocked
     @Mocked修饰的实例,将会把实例对应类的所有实例的所有行为都mock掉(无论构造方法,还是private,protected方法)。

Expectations
     录制期望发生行为的块,一般由Expectations类和NonStrictExpectations类定义,用Expectations类定义的,则mock对象在运行时只能按照 Expectations块中定义的顺序依次调用方法,不能多调用也不能少调用,所以可以省略掉Verifications块;而用NonStrictExpectations类定义的,则没有这些限制,所以如果需要验证,则要添加Verifications块。result和times都是其内定成员变量。result可以重定义录制行为的返回值甚至通过Delegate来重定义行为,times是期待录制行为的发生次数。在Expectations中发生的调用,均会被mock。

Deencapsulation
     用于Mock私有方法和私有属性。

简单示例:
package com.zero.jmockit;

public class Utils {
	private static String URL_STRING = "http://www.sina.com.cn";

	private static void deal() {
		System.out.println("deal() " + URL_STRING);
	}

	public static String getObject(JMockitObject object, String str) {
		deal();
		System.out.println("getObject() ");
		return URL_STRING + str;
	}
}
package com.zero.jmockit;

public class UserService {
	public String getUserName(int id) {
		return "hello";
	}
}
package com.zero.jmockit;

import javax.annotation.Resource;

public class JMockitObject {

	@Resource
	private UserService userService;

	public void dealUser() {
		String name = userService.getUserName(1);
		System.out.println("userService.getUserName() : " + name);
		sys(name);
	}

	private void sys(String name) {
		System.out.println("sys() : " + name);
	}

	public String getString() {
		getObject(this, "/zero");
		return Utils.getObject(this, "/zero");
	}

	private void getObject(JMockitObject object, String str) {
		 System.out.println("--------");
	}

}
package com.zero.jmockit;

import org.junit.*;
import org.junit.runner.RunWith;

import mockit.*;
import mockit.integration.junit4.JMockit;

@RunWith(JMockit.class)
public final class JMockitTest {
	@Tested
	@Mocked
	private JMockitObject jMockitObject;

	@Injectable
	private UserService userService;

	@Test
	public void testDealUser() {
		new NonStrictExpectations() {// 录制预期模拟行为
			{
				userService.getUserName(anyInt);//mock public方法
				result = "zero";// 也可以使returns("zero");
				times = 1;

				Deencapsulation.invoke(jMockitObject, "sys", anyString);//mock private方法
				// sys()无返回值,没定义result,则调用的结果返回空,故result = null; 可写可不写
				result = null;
			}
		};
		jMockitObject.dealUser();//回放
	}

	@Test
	public void testSys() {
		Deencapsulation.invoke(jMockitObject, "sys", "Hello World!");//测试private方法
	}

	@Test
	public void testStaticField() {// mock 静态私有属性
		new NonStrictExpectations(Utils.class) {
			{
				Deencapsulation.setField(Utils.class, "URL_STRING",
						"www.baidu.com");
			}
		};
		// 第二种方式:
		// new MockUp<Utils>() {
		// {
		// // 修改静态私有属性
		// Deencapsulation.setField(Utils.class, "URL_STRING",
		// "www.baidu.com");
		// }
		// };
		String str = Deencapsulation.getField(Utils.class, "URL_STRING");
		Assert.assertEquals("www.baidu.com", str);
	}

	@Test
	public void testStaticFunction() {// mock 静态私有方法
		new MockUp<Utils>() {
			@Mock
			private void deal() {// 注意在MockUp中的方法除了不包含static关键字以外,其他都和被Mock的方法签名相同,并且使用@Mock标注
				System.out.println("mock deal() ");
			}
		};
		Deencapsulation.invoke(Utils.class, "deal");
	}

	@Test
	public void testGetString() {
		new NonStrictExpectations() {
			{
				Deencapsulation.invoke(jMockitObject, "getObject",
						withAny(JMockitObject.class), withAny(String.class));// 不能使用any这样的参数,否则必须使用正确类型的参数;
				// withAny(JMockitObject.class), anyString); 可以
			}
		};
		new NonStrictExpectations(Utils.class) {
			{
				Utils.getObject((JMockitObject) any, anyString);
				returns("zero");
			}
		};

		Assert.assertEquals("zero", jMockitObject.getString());
	}
}



CODESYS连接触摸屏 触摸屏:威纶通-MT8071iP(网络IP:192.168.1.10) 控制器:研华AMAX-5580(PAC)(Win10系统,网络IP:192.168.1.3) CODESYS RTE:RTE 64 V3.5 SP13 Build05 笔记本:Thinkpad L14(网络IP:192.168.1.2) CODESYS IDE:V3.5 SP13(ADD ON V3.5.13.5) 一、确认网络通讯正常(关闭防火墙) 笔记本与触摸屏网络测试情况 笔记本与控制器网络测试情况 二、控制器部分 1、新建 阅读详情

相关推荐

hpm6750evk2开发板(一)菜鸟入门

hpm6750与我们平时常用的stm单片机在开发环境和开发方法上有很大的区别,所以上手还是需要花一点时间的,拿到板子先不要急着上电调试,我们先找资料学习一下了,免得多走冤枉路,以下是我整理的一些学习资源,包括开发板使用手册、芯片SDK、开发工具、视频资料等,建议先把使用手册和学习视频先看了,再取搭建环境测试。最近刚入手一块hpm6750evk2开发板,花了几天时间学习,算是菜鸟入门了,今天分享一下学习过程。看完资料后,把开发工具安装上,下一篇文章我们分享一下调试工程的过程和遇到的问题。

Silas1750的博客 3083

jmockit Deencapsulation 访问类的私有成员和方法

假设我们有个类Student有私有方法

yasi_xi的专栏 1万+

MIT6.824-lab2D-2022(日志压缩详细讲解)

从paper中去讲解,并实现关于lab2D的代码。

幸平的博客 6035

如何对私有方法进行测试

测试中如何对私有方法进行测试: 一般情况下私有方法只能在所属类的内部进行调用,在类外则无法通过对象.方法名的方法调用私有方法。那么在平时测试中,如何测试私有方法,下面分享个人所知的两种方法,如下: 方法一: 【格式】 //调用方法格式 Object result = Deencapsulation.invoke(mockClass, methodName, parameter1, parameter2 ….); 【说明】 mockClass:该参数是需要调用方法所属的类,该类需要被mock metho

『地球是猿的』的博客 2469

华为鸿蒙系统也能用!5分钟搞定谷歌三件套安装(附最新APK下载链接)

本文为华为鸿蒙系统用户提供了一份详尽的谷歌三件套(Google Play服务、商店及框架)手动安装指南。文章核心在于无需Root,通过ADB命令获取设备信息,并从可靠来源下载匹配版本的APK,按照正确顺序安装,从而解决海外应用依赖问题,实现5分钟快速部署。

c7d8e9的博客 6486

AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体

isoft888的专栏,致力于C#/python分享物联网、大数据,神经网络的等领域,欢迎讨论交流! 1551

java mock私有方法_JMockit Mock 私有方法和私有属性

前面说过 JMockit 因身处前线,所以简直无不可,本节例子演示 JMockit 怎么 Mock 私有方法和私有属性,示例虽然是静态方法和属性,但因采用的是反射手法,所以这种Deencapsulation 的 Mock 手段同样适用于公有的方法或属性,无论是否静态。本文所用 JMockit 版本为 1.6, 可能网上所搜索的方法与此有所不同,请注意 JMockit 版本差异。仍需重复一下,运行...

weixin_35347870的博客 5985

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

单元测试技术栈梳理

前言单元测试是一个老生常谈的事情,可是能够深入开发人心,又能够喜欢写单元测试的同学少之又少。单元测试似乎功不在当下的事情,业务代码快速完成需求,才是王道,在工作量评估的时...

技术原始积累 493

ROS中tf2_ros::Buffer.lookupTransform的正确使用姿势:从踩坑到填坑

本文深入解析了ROS中tf2_ros::Buffer.lookupTransform接口的正确使用方法,重点剖析了因tf2_ros::TransformListener生命周期管理不当导致的经典问题。文章提供了从理解Buffer与Listener共生关系、类成员设计黄金法则到参数详解与异常处理的完整避坑指南,并给出了构建健壮坐标变换工具类的实战方案,帮助开发者稳定实现机器人坐标系变换。

weixin_29253711的博客 134

Lora无线温湿度传感器方案

综上所述,Lora无线温湿度传感器以其长距离传输、低功耗、高稳定性、精准测量、无线传输以及广泛的应用场景等特点,在环境监测领域展现出了强大的竞争力和广泛的应用前景。Lora无线温湿度传感器广泛应用于各种需要远程监控和数据采集的场景,如仓储、农业、机房、楼宇、交通、工业、矿产、电力等领域。Lora无线温湿度传感器是一种采用Lora无线通信技术进行数据传输的温湿度监测设备。四、产品参数(以某款工业级Lora温湿度传感器为例)

weixin_46632654的博客 758

Junit学习二:private field

测试包:jmockit-1.6 被测试类: package edu.com; import java.util.ArrayList; import java.util.List; public class T { private static List list; public static void init(){ list = new Ar

1400

uniapp [安卓苹果App端] - 详细实现PDF预览功能在线预览PDF文档,Uniapp App端实现pdf文件预览在线预览pdf二进制文件流、本地pdf文档、PDF文件地址url路径(解决白屏

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,uniapp在线预览pdf功能,在安卓苹果app平台实现PDF的预览查看,uniappApp端实现pdf文件预览,UNIAPP在线预览PDF文档,Uniappapp在线预览pdf文件流,从后端接口里获取pdf文件如何转成链接预览,预览pdf的插件,uni-app的pdf预览功能,uniapp使用pdf.js插件预览pdf文件,预览pdf白屏没有报错,打开后没反应,打开是空白,加载PDF时发生错误,如

🏆 前端领域优质创作者 1万+

Jmockit 使用教程

Jmockit 使用教程Jmockit配置在Maven pom.xml配置JUnit4.x及以下用户特别注意事项JMockit Coverage配置Jmockit 程序结构代码结构测试属性和测试参数Jmockit注解API(@Mocked, @Tested, @Injectable,@Capturing)@Mocked当@Mocked修饰一个类时当@Mocked修饰一个接口/抽象类时@Mocked功能总结什么测试场景,我们要使用@Mocked@Injectable@Injectable 与 @Mocked的

jdycsdn的博客 4385

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Jmockit的使用总结

前言 我几乎都是参考JMockit中文网学习的Jmockit。在这必须得强烈安利一下啊。其实我刚开始看文档的时候,MockUp、@Mock、@Test、@Mocked、@Injectable、@Capturing、Expectations、Verifications那么多注解和类,傻傻分不清。后来慢慢总结了一下自己的理解思路。 这里,我没有像原笔者从概念->语法->用法->原理那...

hello stone 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Jmockit使用指南

概述 mock对象 这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。

y461517142的专栏 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JMockit 介绍 4 使用JMockit运行测试

目录 4 使用JMockit运行测试 4.1从Maven运行测试 1 添加JMockit的Maven依赖 2 添加-javaagent JVM初始化参数 3 配置不正确,可能的报错 4.2从Gradle运行测试 4 使用JMockit运行测试 要运行使用任何JMockit API的测试,请按照通常的方式使用Java IDE,Maven / Gradle构建脚本等。 原则上,可以使用...

AOBO516的专栏 5992

Jmockit的使用

@[TOC] (Jmockit的使用) link Jmockit的基本框架 Jmockit Attach:支持多种操作系统和启动程序,用来集成框架的注入 集成框架: Junit, Spring等 类转换器: Jmockit的核心,用来不同类之间的换,包括:录制,播放,验证,类缓存,伪类,覆盖率和对象捕捉 字节码处理 Mock API Jmockit 注解 Mocked Mocked可以修饰类、抽象类和接口。 生成的Mocked对象的对象方法,包括静态方法返回默认值 如果返回类型是引用对象,则返回引用

weixin_44851958的博客 504

jmockit教程_【原创】如何使用Jmockit进行单元测试

如何使用jmockit进行单元测试1. Jmockit简介JMockit 是用以帮助开发人员编写测试程序的一组工具和API,它完全基于 Java 5 SE 的java.lang.instrument 包开发,内部使用 ASM 库来修改Java的Bytecode。正是由于基于instrument,可以修改字节码。所以这也是它强大的原因。Jmockit可以mock的种类包含了:1. class(ab...

weixin_39828859的博客 2977

Jmockit入门应用

公司项目单元测试使用Jmockit框架,最近对我这个菜鸡进行一次培训,一下是对单元测试以及Jmockit的总结。 为什么要写单元测试这个问题不用解释了,脑容量太小了多几个分支就想不过来的人,为了面子还是覆盖率高一点吧,不然后面遇到线上bug面子上过不去啊。那么为什么要使用框架写单元测试呢?蛮荒时代,我们都会用main方法进行测试,但是这种代码看着就不太舒服,写个测试用例就得修改代码,这谁能保证有没有破坏分子利用补单元测试的机会搞破坏呢?使用框架写单元测试的好处主要就是以下两点: 生产代码和测试代码隔离

Xp545945的博客 596

JMockit 使用

  JMockit 使用 1.使用介绍 传统mock方法的限制: JDK Proxy必须实现接口 Cglib Proxy的class和方法不能是final限定的 对于静态方法无能为力 对非public方法无能为力,或者需要花比较大的代价进行反射处理 比较依赖于Ioc机制,对于new或工厂类管理的bean无法进行有效的测试 JMockit优点 JMockit项目基于 Java 5 SE 的 ja...

莫护已短,护短,则已终不长 652

PowerMock和JMockit的使用与对比

PowerMock的使用 之所以提到PowerMock而不是Mock,是因为自己服务器端的配置数据获取的方法是静态方法,如果使用mock方式来模拟数据,只有PowerMock支持Mock静态方法,Mock不支持。 引入PowerMock &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.powermock&amp;lt;/groupId&amp;gt; &amp;lt;artifa

laokerr的博客 3770

jmockit-01-test 之 jmockit 入门使用案例

(2)注解@Test、@Mocked、@Injectable、@Capturing是和new Expectations()方式搭配使用。然后@Mocked、@Injectable、@Capturing又有不同的特性,就可以解决不同场景下的Mock了。2)repaly:在这个阶段,执行单元测试Case,原先在record 阶段被录制的调用都可能有机会被执行到。主要使用@Test、@Mocked、@Injectable、@Capturing和Expectations搭配使用实现Mock。

1971

jmockit教程_jmockit使用总结-MockUp重点介绍

公司对开发人员的单元测试要求比较高,要求分支覆盖率、行覆盖率等要达到60%以上等等。项目中已经集成了jmockit这个功能强大的mock框架,学会使用这个框架势在必行。从第一次写一点不会,到完全可以应付工作要求,期间踩了好多坑,学到了不少东西。下面简单总结一下jmockit这个框架的使用,重点介绍MockUp的使用,因为项目中都采用此种方式模拟方法。一、框架集成添加maven依赖org.jmock...

weixin_39606911的博客 3272

JMockit、Mockito和Powermock介绍

@JMockit、Mockito和PowerMock的区别 前言 最近看到公司项目里用到了JMockit的框架测试,结合以往使用的Mockito和PowerMock来分析一下三者是如何使用的。 一、JMockit使用步骤 1. 引入依赖 <dependency> <groupId>org.jmockit</groupId> <artifactId>jmockit</artifactId> <version>1.31</v

qq_41063593的博客 4980

JMockit 使用指南

SpringBoot 应用中如何使用 JMockit 进行单元测试

codeboys的专栏 4239
上一篇: JVM参数
下一篇: DBCP连接池配置参数
zero__007
博客等级 码龄12年 326粉丝 247原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值