`
kanpiaoxue
  • 浏览: 1777446 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

PowerMockit常用

 
阅读更多

 

文档: http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html

 

1、测试 void 方法

@Autowired
    private JdbcTemplate jdbcTemplate;
    public static final String DELETE_INSTANCE_RELY_BY_TASK = " DELETE FROM tb_instance_rely_rel    "
            + "WHERE task_id=? AND instance_id IN (    SELECT c.instance_id    FROM     "
            + "(SELECT task_id     FROM tb_task    WHERE task_id=?    )a     JOIN    tb_data_version b   "
            + " ON a.task_id =  "
            + " b.task_id     JOIN    tb_instance c    ON b.version_id = c.version_id    WHERE c.state=?    )";


    @Override
    public void deleteInitializedInstanceRelyByTask(long taskId, long upTaskId) {

        final Object[] args = { upTaskId, taskId, InstanceState.INITIALIZED.getValue() };

        LOGGER.debug(Tools.getSqlArgsString(DELETE_INSTANCE_RELY_BY_TASK, args));
        jdbcTemplate.update(DELETE_INSTANCE_RELY_BY_TASK, args);
    }

 

测试代码片段:

  private JdbcTemplate jdbcTemplate;
    private InstanceRelyRelDaoImpl impl;
    private long taskId = 100L;
    private long upTaskId = 101L;

    @Before
    public void before() {
        jdbcTemplate = mock(JdbcTemplate.class);
        impl = new InstanceRelyRelDaoImpl();

        Whitebox.setInternalState(impl, "jdbcTemplate", jdbcTemplate);
    }

    public void testDeleteInitializedInstanceRelyByTask() {
        impl.deleteInitializedInstanceRelyByTask(taskId, upTaskId);
        Object[] args = { upTaskId, taskId, InstanceState.INITIALIZED.getValue() };
        Mockito.verify(jdbcTemplate).update(InstanceRelyRelDaoImpl.DELETE_INSTANCE_RELY_BY_TASK, args);
    }

 

2、测试static 静态方法

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;



import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.KeyHolder;

import java.util.Date;

@RunWith(PowerMockRunner.class) // mock静态方法,必须有
@PrepareForTest({ Utils.class }) // mock静态方法,必须有
public class EntitySubscribeFlowDaoImplTest {
    private EntitySubscribeFlowDaoImpl impl;
    private JdbcTemplate jdbcTemplate;

    @Before
    public void before() {
        impl = new EntitySubscribeFlowDaoImpl();
        jdbcTemplate = mock(JdbcTemplate.class);
        Whitebox.setInternalState(impl, "jdbcTemplate", jdbcTemplate);
    }

    /**
     * Test method
     */
    @Test
    public void testAddEntitySubscribeFlow() {
        try {
            impl.addEntitySubscribeFlow(null);
            fail();
        } catch (Exception e) {
            assertTrue(true);
        }
        try {
            EntitySubscribeFlow flow = new EntitySubscribeFlow();
            KeyHolder keyHolder = mock(KeyHolder.class);
            mockStatic(Utils.class); // mock静态方法,必须有
            when(Utils.createKeyHolder()).thenReturn(keyHolder); // mock静态方法,必须有
            when(keyHolder.getKey()).thenReturn(10L);
            long id = impl.addEntitySubscribeFlow(flow);
            Mockito.verify(jdbcTemplate).update(Mockito.any(PreparedStatementCreator.class),
                    Mockito.any(KeyHolder.class));
            System.err.println("================= " + id);
        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }
    }



}

  

3、mock 掉方法中的 private 私有方法

参考地址: http://automationrhapsody.com/mock-private-method-call-powermock/

 

public class PowerMockDemo {
 
    public Point callPrivateMethod() {
        return privateMethod(new Point(1, 1));
    }
 
    private Point privateMethod(Point point) {
        return new Point(point.getX() + 1, point.getY() + 1);
    }
}

 

 

 

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
 
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.mock;
 
@RunWith(PowerMockRunner.class)
@PrepareForTest(PowerMockDemo.class)
public class PowerMockDemoTest {
 
    private PowerMockDemo powerMockDemoSpy;
 
    @Before
    public void setUp() {
        powerMockDemoSpy = PowerMockito.spy(new PowerMockDemo());
    }
 
    @Test
    public void testMockPrivateMethod() throws Exception {
        Point mockPoint = mock(Point.class);
 
        PowerMockito.doReturn(mockPoint)
            .when(powerMockDemoSpy, "privateMethod", anyObject());
 
        Point actualMockPoint = powerMockDemoSpy.callPrivateMethod();
 
        assertThat(actualMockPoint, is(mockPoint));
    }
}

 或者

@Test
public void testCompose() {
    Train train = new Train();
    Train trainSpy = Mockito.spy(train);
    //notice different Mockito syntax for spy   
    Mockito.doReturn(TESTING_WAGON_COUNT).when(trainSpy).getWagonsCount();
    Mockito.doNothing().when(trainSpy).addWagon(0);
    // invoke testing method
    int actualWagonCount = trainSpy.compose();
    Assert.assertEquals(actualWagonCount, TESTING_WAGON_COUNT);
    Mockito.verify(trainSpy, Mockito.times(TESTING_WAGON_COUNT))
    .addWagon(0);
}

 

 网上找的的一些其他人的例子:

参考地址: http://chenjingbo.iteye.com/blog/1696488

    @Test  
    public void testCreateMarketingDetail() throws Exception {  
        PowerMockito.doReturn(marketingDetail).when(internalMarketingBuilder,"createMarketingDetail",marketingActivity);  
        Assert.assertTrue(umpDetailManager.createMarketingDetail(marketingActivity).getDetailId() == detailId);  
    }  
  
    @Test(expected = ManagerException.class)  
    public void testCreateMarketingDetail_Exception() throws Exception {  
        PowerMockito.doThrow(new RuntimeException("test")).when(internalMarketingBuilder, "createMarketingDetail", marketingActivity);  
        Assert.assertTrue(umpDetailManager.createMarketingDetail(marketingActivity).getDetailId() == detailId);  
    }  
  
    @Test(expected = ManagerException.class)  
    public void testCreateMarketingDetail_Exception2() throws Exception {  
        umpDetailManager.createMarketingDetail(null);  
    }  
  
    @Test  
    public void testAddMarketingDetail() throws Exception {  
        PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail);  
        PowerMockito.doReturn(prepareResultSupport()).when(marketingActivityTopServiceClient,"addMarketingDetail",activityId,content,sellerId);  
        Assert.assertEquals(umpDetailManager.addMarketingDetail(activityId,marketingDetail,sellerId).getDefaultModel(),detailId);  
    }  
  
    @Test(expected = ManagerException.class)  
    public void testAddMarketingDetail_Exception() throws Exception {  
        PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail);  
        PowerMockito.doThrow(new RuntimeException("test")).when(marketingActivityTopServiceClient,"addMarketingDetail",activityId,content,sellerId);  
        umpDetailManager.addMarketingDetail(activityId,marketingDetail,sellerId);  
    }  
  
    @Test  
    public void testDeleteMarketingDetail() throws Exception {  
        PowerMockito.doReturn(prepareResultSupport2()).when(marketingActivityTopServiceClient,"deleteMarketingDetail",detailId,sellerId);  
        Assert.assertFalse(umpDetailManager.deleteMarketingDetail(detailId,sellerId).isSuccess());  
    }  
  
    @Test(expected = ManagerException.class)  
    public void testDeleteMarketingDetail_Exception() throws Exception {  
        PowerMockito.doThrow(new RuntimeException("test")).when(marketingActivityTopServiceClient,"deleteMarketingDetail",detailId,sellerId);  
        Assert.assertFalse(umpDetailManager.deleteMarketingDetail(detailId,sellerId).isSuccess());  
    }  
  
    @Test  
    public void testUpdateMarketingActivityDetail() throws Exception {  
        PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail);  
        PowerMockito.doReturn(prepareResultSupport2()).when(marketingActivityTopServiceClient,"updateMarketingDetail",detailId,content,sellerId);  
        Assert.assertFalse(umpDetailManager.updateMarketingActivityDetail(detailId,marketingDetail,sellerId).isSuccess());  
    }  
  
    @Test(expected = ManagerException.class)  
    public void testUpdateMarketingActivityDetail_Exception() throws Exception {  
        PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail);  
        PowerMockito.doThrow(new RuntimeException("test")).when(marketingActivityTopServiceClient,"updateMarketingDetail",detailId,content,sellerId);  
        Assert.assertFalse(umpDetailManager.updateMarketingActivityDetail(detailId,marketingDetail,sellerId).isSuccess());  
    }  

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    解压软件 ZArchiver.apk

    解压软件 ZArchiver.apk

    毕设项目:基于SSM框架+mysql开发的教务管理系统分前后台【附含源码+数据库+毕业论文】

    二、技术实现 后端:spring,springmvc,mybatis,mysql 前端采用:vue,css 运行环境及开发工具:jdk8,idea或者eclipse,Navicat 三、系统功能 系统登录角色分为:管理员、老师、学生 用户登录 用户注册 首页 个人中心 修改密码 个人信息 班级管理 成绩类型管理 公告类型管理 教程类型管理 第几节管理 院系管理 职称管理 专业管理 公告管理 课程管理 成绩管理等功能

    设计和仿真一个用于控制双质量弹簧阻尼系统位移的多变量控制系统.docx

    设计和仿真一个用于控制双质量弹簧阻尼系统位移的多变量控制系统.docx

    1-全国各地级市金融机构本外币与人民币存款和贷款2010-2020年-社科数据.zip

    这份数据集详细记录了2010至2020年间中国各城市金融机构的本外币存款和人民币贷款情况。数据涵盖了商业银行、农村合作银行、信用社等多种金融机构的存款数据,包括本币和外币存款情况。这些数据不仅反映了各城市金融机构的存款规模,也为分析金融市场的发展趋势、资金流动状况及城市经济活动提供了重要视角。数据来源于中国区域统计年鉴和各省市统计年鉴,以面板数据形式呈现,包含1948个样本。通过这些数据,金融机构、政策制定者、研究人员和投资者可以深入了解各城市的金融市场格局,辅助做出更准确的决策和分析。

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能.docx

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能

    NovaMaker-2.4.29-win-64-bit.zip

    NovaMaker-2.4.29-win-64-bit.zip

    Spring Boot相关的资源.txt

    Spring Boot相关的资源.txt

    Hive简易操作入门中文最新版本

    本文档主要讲述的是Hive简易操作入门;本流程中以putty为例,如果使用别的SSH客户端,界面上会不同,基本过程相似。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

    ASP+ACCESS软件信息发布系统设计(源代码+论文+开题报告+任务书+答辩PPT)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    浅析Sybase数据库系统性能调优中文最新版本

    本文档主要讲述的是浅析Sybase数据库系统性能调优;性能调优”是对应用程序的性能优化。SYBASE数据库“性能调优”的主要目的是减少对系统公共资源的争用。对sybase数据库系统的性能进行优化,是一项长期且受诸多因素影响的工作,希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

    用VBS制作自己的进度条

    用VBS制作自己的进度条

    校际运动会管理系统程序设计基础课程设计报告.doc

    校际运动会管理系统程序设计基础课程设计报告.doc

    ORACLECRS日常维护命令中文最新版本

    本文档主要讲述的是ORACLE CRS日常维护命令;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

    [net毕业设计]ASP.NET教务信息管理系统的设计与实现(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    1-全国各省商品市场分割指数相对价格法计算过程+计算结果2000-2020年-社科数据.zip

    全国各省商品市场分割指数相对价格法的计算过程和结果数据集提供了2000至2020年间中国各省份市场分割的量化分析。该数据集基于12大类商品,包括粮食、纺织品、服装鞋帽等,利用地区间商品价格差异来分析市场分割状况。核心计算方法为相对价格法,通过比较不同地区同一商品的价格指数,来衡量市场分割程度。数据集包含原始数据、计算过程和最终结果,原始数据主要来源于统计年鉴中的商品价格指数。计算步骤包括计算历年资本边际产出比值、求均值、方差等,最终得出资本市场一体化程度。该数据集为研究中国国内市场一体化进程提供了重要参考。

    1-全国上市公司绿色投资者原始数据+计算代码+参考文献2008-2022年-社科数据.zip

    全国上市公司绿色投资者数据集(2008-2022年)提供了中国上市公司在环保和可持续发展方面的资金吸引力的详细视角。该数据集涵盖了股票代码、年份、会计年度、股票简称、STPT标识、行业名称及代码,以及绿色投资者数量等关键指标。它记录了超过42,000个观测值,涉及4,700多家样本企业,为投资者、金融分析师、政策制定者和环境研究者提供了评估企业环保表现、理解绿色投资趋势以及制定相关策略的辅助工具。数据集包括是否有绿色投资者的虚拟变量,以及绿色投资者数目加1的自然对数两个指标,可以用于衡量企业绿色治理情况。这些数据不仅展示了中国上市公司在环境保护方面的资金流向,也反映了投资者对绿色投资的关注动态,对于研究绿色投资与企业行为的关系提供了宝贵的实证数据支持。

    15da2b5d3ceeddc8af2f6a7eed26d7e0.JPG

    15da2b5d3ceeddc8af2f6a7eed26d7e0.JPG

    前端工程化实践课程下载

    视频课程下载——前端工程化实践

    yolo算法-行人数据集-7203张图像带标签-人-主人.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    模拟电路.txtrdhhffthg

    c语言入门

Global site tag (gtag.js) - Google Analytics