PowerMock 教程(配合 Jacoco)

本文详细介绍了PowerMock的使用方法,包括环境搭建、Mock各种属性和方法,如private、final、static等,以及如何进行测试。PowerMock作为Mockito的扩展,可以处理更复杂的模拟场景,如静态方法、构造函数等。文章适用于Java后端开发者进行单元测试时参考。
摘要由CSDN通过智能技术生成

是我在使用 Powermock 中逐渐归纳的一些使用方法、遇到的坑、以及不同场景的最佳实践。文章没有对 PowerMock 这个框架做非常详细的介绍,但已经足够使用了。缺点是没有那种很长很全面的案例,因为我不想让文章看起来太长太复杂。但全部读完再动手实践一下,应该能应对 99% 的场景了。

PowerMock 使用方法

一、PowerMock 介绍

Mockito 与 PowerMock 都是 Java 流行的 Mock 框架,使用Mock技术能让我们隔离外部依赖以便对我们自己的业务逻辑代码进行单元测试。

Mockito 的工作原理是通过创建依赖对象的 proxy,所有的调用先经过 proxy 对象,proxy 对象拦截了所有的请求再根据预设的返回值进行处理。

PowerMock 则在 Mockito 原有的基础上做了扩展,通过修改类字节码并使用自定义 ClassLoader 加载运行的方式来实现 mock 静态方法、final 方法、private 方法、系统类的功能。

从两者的项目结构中就可以看出,PowerMock 直接依赖于 Mockito,所以在项目中使用时只需要导入 PowerMock 包,不需要再单独导入 Mockito 包。并且 PowerMock 完全支持了 Mocktio 的 API,又在此基础上增加了自己的 API,可以看作是 Mocktio 的增强版。

二、环境搭建

(一)maven 引入

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>2.0.9</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.9</version>
    <scope>test</scope>
</dependency>

(二)常用注解

1、@Target(ElementType.TYPE)

常用在类上面的注解有以下几个:

  • @RunWith

    在测试类类名上添加 @RunWith(PowerMockRunner.class) 注解代表该测试类使用 PowerMock。必须添加

  • @PrepareForTest

    这个注解的作用就是告诉 PowerMock 哪些类是需要在字节码级别上进行操作的。也就是需要 mock 某些包含 final、static 等方法的类时使用,使用方法:@PrepareForTest({System.class, LogUtils.class})

  • @PowerMockIgnore

    PowerMock 是使用自定义的类加载器来加载被修改过的类,从而达到打桩的目的。@PowerMockIgnore 注解告诉 PowerMock 忽略哪些包下的类,从而消除类加载器引入的 ClassCastException。使用方法:@PowerMockIgnore({“javax.management.*”, “javax.net.ssl.*”, “javax.script.*”})

  • @SuppressStaticInitializationFor

    告诉 PowerMock 哪些包下的类需要被抑制静态初始化,包括 static 代码块或者 static 变量的初始化。防止因静态初始化导致的错误。使用方法:@SuppressStaticInitializationFor({“com.xxx.SmsServiceImpl”})

2、@Target({ElementType.FIELD})

常用在字段/属性上面的注解有以下几个:

  • @In

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值