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

发布时间:2021-11-30 06:38:43

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 PowerMock EasyMock API extension to mock a class private methods.


有时我们想测试使用私有方法的方法。 我们可以使用EasyMock创建模拟对象,但EasyMock不允许我们模拟私有方法。 因此,我们可以使用PowerMock EasyMock API扩展来模拟类私有方法。


使用PowerMock的EasyMock私有方法模拟 (EasyMock Private Method Mock using PowerMock)

For stubbing private method behavior, we have to use PowerMock.createPartialMock() to get the mock object. This is required so that we don’t mock the methods where these private methods are being called.


为了消除私有方法的行为,我们必须使用PowerMock.createPartialMock()来获取模拟对象。 这是必需的,这样我们就不会在调用这些私有方法的地方嘲笑这些方法。




After that, use PowerMock.expectPrivate() method to stub the private method behavior.


之后,使用PowerMock.expectPrivate()方法存根私有方法的行为。


Make sure to call PowerMock.replay() before writing the test code that uses the stubbed methods. For stub methods call verification, use PowerMock.verify() method.


在编写使用存根方法的测试代码之前,请确保调用PowerMock.replay() 。 对于存根方法调用验证,请使用PowerMock.verify()方法。


EasyMock私有方法? JUnit 4 (EasyMock Private Method ? JUnit 4)

PowerMock doesn’t support JUnit 5 as of now, so I will use JUnit 4 for writing test cases.


PowerMock目前不支持JUnit 5,因此我将使用JUnit 4编写测试用例。


Let’s say we have a class defined as:


假设我们有一个定义为的类:










class Foo {
private boolean isInit() {
return false;
}
private String reverse(String s) {
return null;
}
public boolean checkStatus() {
return isInit();
}
public String doReverse(String s) {
return reverse(s);
}
}

Notice that the public methods are internally calling the class private methods.


注意,公共方法在内部调用类私有方法。


Here is the test class where we are mocking the private method behaviors.


这是测试类,我们在其中模拟私有方法的行为。


package com.journaldev.easymock.powermock.privatemethod;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.powermock.api.easymock.PowerMock.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
public class JUnit4PowerMockEasyMockPrivateExample {

@Test
public void test_private_method() throws Exception {
Foo mock = createPartialMock(Foo.class, "isInit", "reverse");

expectPrivate(mock, "isInit").andReturn(true);
expectPrivate(mock, "reverse", "cat").andReturn("tac");
expectPrivate(mock, "reverse", "123").andReturn("321");
replay(mock);

assertTrue(mock.checkStatus());
assertEquals("tac", mock.doReverse("cat"));
assertEquals("321", mock.doReverse("123"));

verify(mock);
}
}

Notice that we are creating partial mock for only private methods, public methods are not mocked. So when we call these public methods, the real method will get called that will internally call the private method and our stubbed method implementation will be used.


请注意,我们仅为私有方法创建部分模拟,未模拟公共方法。 因此,当我们调用这些公共方法时,将调用真正的方法,该方法将在内部调用私有方法,并且将使用我们的存根方法实现。


EasyMock专用方法? TestNG (EasyMock Private Method ? TestNG)

Here is the example of mocking private method written in TestNG testing framework.


这是用TestNG测试框架编写的模拟私有方法的示例。


package com.journaldev.easymock.powermock.privatemethod;

import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.annotations.Test;

import static org.powermock.api.easymock.PowerMock.*;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;

@PrepareForTest(Foo.class)
public class TestNGPowerMockEasyMockPrivateExample extends PowerMockTestCase{

@Test
public void test_private_method() throws Exception {
Foo mock = createPartialMock(Foo.class, "isInit", "reverse");

expectPrivate(mock, "isInit").andReturn(true);
expectPrivate(mock, "reverse", "cat").andReturn("tac");
expectPrivate(mock, "reverse", "123").andReturn("321");
replay(mock);

assertTrue(mock.checkStatus());
assertEquals("tac", mock.doReverse("cat"));
assertEquals("321", mock.doReverse("123"));

verify(mock);
}
}

Notice that the TestNG class is extending PowerMockTestCase class, so that PowerMock API is used to run the test cases.


注意,TestNG类扩展了PowerMockTestCase类,因此使用PowerMock API来运行测试用例。


摘要 (Summary)

PowerMock is a great extension API for EasyMock and Mockito mocking frameworks. It’s easily integrated with EasyMock and JUnit/TestNG frameworks. I hope they start supporting JUnit 5 real soon.


PowerMock是EasyMock和Mockito模拟框架的出色扩展API。 它很容易与EasyMock和JUnit / TestNG框架集成。 我希望他们尽快开始真正支持JUnit 5。



GitHub Repository.
GitHub存储库中检出完整的项目和更多EasyMock示例。


翻译自: https://www.journaldev.com/22379/easymock-private-method-mock-powermock



powermock私有字段







相关资源:powermock-easymock-junit-1.5.4.zip

相关文档

  • 高二语文拿来主义课后练习题
  • 华为lld一al00是什么型号
  • 台湾麻油鸡怎么做台湾麻油鸡的做法
  • 生煤炉
  • 炎夏吃热养生 红油猪肚补充苦夏营养
  • conda deactivate python3_python之Anaconda python3.7安装
  • 奶牛镇的小时光黑暗精魄获取方法分享
  • 为什么你没能从错误中学到什么美文摘抄
  • 黄巢起义是哪个朝代的
  • 小丑鱼简笔画
  • 泰戈尔诗歌推荐
  • cocos2d-x游戏开发系列教程-中国象棋05-开始游戏
  • 幼儿园中班优秀主题教案《欢欢喜喜迎新年》含反思
  • 校长助理的述职报告参考
  • 线程顺序执行
  • 打击情敌的话_对情敌说打击的话
  • 经济法基本知识的考试题目是什么
  • 沙漠玫瑰怎么修剪
  • 关于生气的签名
  • 初一家长会心得
  • 三只玫瑰代表什么意思
  • 带小孩保姆的合同范本
  • js对象的深浅拷贝
  • 蔡邕被害文言文阅读及参考译文参考答案
  • ambari 集成自定义组件??官方翻译-Stacks and Services
  • 我的梦想MyDream
  • 案例分享一个电子邮件营销广告案例!
  • 行政专员2020上半年个人工作总结
  • nginx配置及问题总结
  • 怎么把u盘拷到
  • 猜你喜欢

  • Java实验(3):类与继承、Java的多态
  • 实验四-单相交直交变频电路的性能研究
  • 2019-2020学年七年级语文上册 《第10课 社戏》教案 苏教版.doc
  • 孕妇能不能吃桑椹和营养价值
  • 工业风格的办公空间设计图片
  • 苏州市级财政支出项目绩效自评价报告
  • 中考档案江苏省中考数学总复*热点专题第九章9.3图表信息题课件
  • 分公司注销的流程是怎么样的
  • 成长的快乐七年级作文600字_2
  • 价格行政处罚文书示范文本02.案件移送函
  • 2015计算机基础理论题练*与参考答案
  • 2019年全国Ⅰ卷高考作文及解析
  • 全国一本音乐学院排名
  • 快速换型压铸机作业流程优化案例分析
  • 工程造价案例第三章PPT课件
  • 保安年度总结:校园保安个人工作总结
  • 【精选】陕西省宝鸡市高考物理一模试卷 Word版含解析-物理知识点总结
  • 双连拱隧道施工方法
  • 家庭美容小窍门都有什么?
  • 女孩超拽独立的个性签名
  • 成都豪宅市场研究报告
  • 2015年下半年重庆省房地产经纪制度与政策:土地增值税考试题
  • 2018年-汽车销售工作总结范文-【拿来即用模版PPT】
  • {常用}小学教师年终工作总结范文学*参考(word格式)
  • 对初中语文阅读教学中设疑提问的若干思考
  • 杭锦旗森泰隆农资有限责任公司企业信用报告-天眼查
  • 放烟花五年级作文800字
  • 媒体莫做炒作明星隐私的长舌妇
  • 肥料配方
  • 初三读后感:读《蜜蜂颂》
  • 【数学】湖南省炎德英才大联考雅礼中学2018届高三月考(八)数学(文)试卷 扫描版含答案
  • 小升初英语发音学*:辅音的发音技巧
  • 【免费下载】人教新课标四年级数学下册第三单元运算定律与简便计算测试及答案
  • 东南亚知识点总结
  • 人教版八年级下学期《勾股定理》基础知识点归纳和题型归类
  • 【2018最新】铁路局工作实*报告word版本 (6页)
  • 简述五金业代理商如何做好区域市场
  • 维修部燃料机务专业检修滚动计划表
  • 在别里科夫追悼会上的讲话
  • 【最新文档】天秤座辞职的理由-范文模板 (1页)
  • 中国的社会福利制度
  • 小学数学北师大2011课标版四年级认识三角形和*行四边形
  • 电脑版