前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手带你入门ock测试(一)之 PowerMock的入门

手把手带你入门ock测试(一)之 PowerMock的入门

作者头像
软件测试君
发布2022-12-05 16:32:31
6410
发布2022-12-05 16:32:31
举报
文章被收录于专栏:测试人生测试人生

关于PowerMock

在TDD领域Mock框架有很多,比如EasyMock,JMock,Mockito。可能有些同学会好奇了,为什么要重点把PowerMock拿出来呢,因为PowerMock可以解决前面三种框架不能解决的问题,而且PowerMock也是是单元测试中极其强大的测试框架。

PowerMock特点

主要围绕着Junit、TestNg测试框架开展进行 对所依赖的Jar包非常的苛刻,出现jar包的冲突或者不一致就不能使用!

PowerMock也是一种Mock,主要是解决其他Mock不能解决的问题,通俗的讲,就是专治各种不服!

PowerMock入门实例
1、引入依赖jar包
代码语言:javascript
复制
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.6.1</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.6.1</version>
    <scope>compile</scope>
</dependency>
2、实际案例

模拟场景:新增学生操作

先建一个名为StudentService的类,用来模拟服务调用操作,在这个类中新增一个方法,来模拟查询总共有多少个学生。

具体示例代码如下:

代码语言:javascript
复制
package com.rongrong.powermock.service;

import com.rongrong.powermock.dao.StudentDao;

/**
 * @author longrong.lang
 * @version 1.0
 * @date 2019/11/17 21:13
 */
public class StudentService {
    private StudentDao studentDao;

    public StudentService(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    /**
     * 获取学生个数
     *
     * @param studentDao
     */
    public int getTotal(StudentDao studentDao) {
        return studentDao.getTotal();
    }
}

可以看出创建service需要传递StudentDao这个类,接着我们再来创建StudentDao这个类,用于进行新增操作。

具体示例代码如下:

代码语言:javascript
复制
package com.rongrong.powermock.dao;

/**
 * @author longrong.lang
 * @version 1.0
 * @date 2019/11/17 21:15
 */
public class StudentDao {
    public int getTotal() {
        throw new UnsupportedOperationException();
    }
}

仔细看,你会发现,你肯定调不了dao了,这回傻了吧,哈哈哈!!!

你会好奇这块为啥我要抛出UnsupportedOperationException异常呢,因为我就想模拟服务不可用的情况(实际中经常会遇到可能由于某种原因(没有完成,或者资源不存在等)无法为 Service 服务),这样的情况,难道我们就不测试了吗?

那我还是乖乖的把测试用例写完,并测试下吧,下面我们再来创建一个名为StudentServiceTest的测试类。

具体示例代码如下:

代码语言:javascript
复制
package com.rongrong.powermock.service;

import com.rongrong.powermock.dao.StudentDao;
import org.testng.annotations.Test;

/**
 * @author longrong.lang
 * @version 1.0
 * @date 2019/11/17 21:19
 */
public class StudentServiceTest {
    @Test
    public void testAddStudent() {
        StudentDao studentDao = new StudentDao();
        StudentService studentService = new StudentService(studentDao);
        studentService.getTotal(studentDao);
    }

}

上面的测试用例肯定会执行失败,那我们也来执行下看,效果如下图:

我们先将这个报错,脑补为链接不上数据库,问题很明显,数据库挂了,就是连接不上了,等着服务器好了得三天后,可是今晚领导就要看功能实现,你该怎么办?无法测试service,难道就真的结束了吗?

答案是否定的,此时我们用PowerMock便可完美解决问题,接下来我们请出powermock登场。

具体代码如下:

代码语言:javascript
复制
package com.rongrong.powermock.service;

import com.rongrong.powermock.dao.StudentDao;
import org.powermock.api.mockito.PowerMockito;
import org.testng.Assert;
import org.testng.annotations.Test;

/**
 * @author longrong.lang
 * @version 1.0
 * @date 2019/11/17 21:19
 */
public class StudentServiceTest {

    @Test
    public void testGetStudentTotal() {
        StudentDao studentDao = PowerMockito.mock(StudentDao.class);
        PowerMockito.when(studentDao.getTotal()).thenReturn(666);
        StudentService studentService = new StudentService(studentDao);
        int total = studentService.getTotal(studentDao);
        Assert.assertEquals(total, 666);
    }


}

这时再次运行,你会发现神奇般的运行通过,结果如下图所示:

是不是很神奇,很惊喜,没错,这个框架就是这么强大。

我们可以这样理解mock就是创建一个假的该对象,然后需要你告诉这个对象调用某个方法的时候返回某个你指定的值即可。

到此,一个简单PowerMock入门结束

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PowerMock特点
  • PowerMock入门实例
  • 1、引入依赖jar包
  • 2、实际案例
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档