《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之编写流程(5)

简介: 《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之编写流程(5)

3. 模拟其它特殊方法

 

1) 模拟final方法

 

PowerMock提供对final方法的模拟,方法跟模拟普通方法一样。但是,需要把对应的模拟类添加到@PrepareForTest注解中。

 

image.png

 

2) 模拟私有方法

 

PowerMock提供提对私有方法的模拟,但是需要把私有方法所在的类放在@PrepareForTest注解中。

 

image.png

 

3) 模拟构造方法

 

PowerMock提供PowerMockito.whenNew方法来模拟构造方法,但是需要把使用构造方法的类放在@PrepareForTest注解中。

 

image.png

 

4) 模拟静态方法

 

PowerMock提供PowerMockito.mockStatic和PowerMockito.spy来模拟静态方法类,然后就可以模拟静态方法了。同样,需要把对应的模拟类添加到@PrepareForTest注解中。

 

image.png

 

注意

第一种方式不适用于PowerMockito.spy模拟的静态方法类。


 

七、 调用被测方法

 

在准备好参数对象后,就可以调用被测试方法了。

 

如果把方法按访问权限分类,可以简单地分为有访问权限和无访问权限两种。但实际上,Java语言中提供了public、protected、private和缺失共4种权限修饰符,在不同的环境下又对应不同的访问权限。具体映射关系如下:

 

image.png 

 

下面,将根据有访问权限和无访问权限两种情况,来介绍如何调用被测方法。

 

1. 调用构造方法

 

1) 调用有访问权限的构造方法

 

可以直接调用有访问权限的构造方法。

 

image.png

 

2) 调用无访问权限的构造方法

 

调用无访问权限的构造方法,可以使用PowerMock提供的Whitebox.invokeConstructor方法。

 

image.png

 

备注

该方法也可以调用有访问权限的构造方法,但是不建议使用。

 

2. 调用普通方法

 

1) 调用有访问权限的普通方法

 

可以直接调用有访问权限的普通方法。

 

image.png 

 

2) 调用无权限访问的普通方法

 

调用无访问权限的普通方法,可以使用PowerMock提供的Whitebox.invokeMethod方法。

 

image.png

 

也可以使用PowerMock提供Whitebox.getMethod方法和PowerMockito.method方法,可以直接获取对应类方法对象。然后,通过Method的invoke方法,可以调用没有访问权限的方法。

 

image.png

 

备注

该方法也可以调用有访问权限的普通方法,但是不建议使用。

 

3. 调用静态方法

 

1) 调用有权限访问的静态方法

 

可以直接调用有访问权限的静态方法。

 

image.png

 

 

2) 调用无权限访问的静态方法

 

调用无权限访问的静态方法,可以使用PowerMock提供的Whitebox.invokeMethod方法。

 

image.png

 

备注

该方法也可以调用有访问权限的静态方法,但是不建议使用。

 

相关文章
|
3天前
|
Java
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
13 1
|
19天前
|
Java 测试技术 数据库
【JAVA基础篇教学】第十七篇:Java单元测试
【JAVA基础篇教学】第十七篇:Java单元测试
|
3天前
|
Java 开发者
深入探索Java语言的流程控制
深入探索Java语言的流程控制
|
5天前
|
分布式计算 Java 测试技术
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
14 0
|
8天前
|
Java
java基础--程序流程控制
- **for循环案例**:求1-100的和及奇数和。 - **while循环**:未知循环次数时使用,基础案例:打印"Hello World"五次。 - **do-while循环**:至少执行一次,区别于先判断的for和while循环。 - **循环嵌套**:一个循环内含另一循环,例如打印矩形。 - **跳转语句**:`break`用于提前结束循环,`continue`跳过当前循环迭代。 ```
|
8天前
|
Java 程序员
java基础--程序流程控制(1)
学习编程中的分支结构,主要涉及if和switch。if分支用于条件判断,常见于体温检测和支付场景,有三种形式:单if、if-else和if-else if...else。switch通过比较值来选择执行代码块,适用于星期安排等案例。选择if或switch取决于判断类型:范围判断适合if,逐值比较适合switch。使用switch注意数据类型限制(如byte、short、int、char及JDK5后的枚举和JDK7后的String)、case值的唯一性和字面量特性,以及避免忘记break导致的穿透现象。
|
18天前
|
NoSQL Dubbo Java
StringBoot编程式事务与声明式事务java工程师面试突击第一季
StringBoot编程式事务与声明式事务java工程师面试突击第一季
|
18天前
|
Java 测试技术
Java一分钟之-单元测试:JUnit与TestNG
【5月更文挑战第16天】本文介绍了Java常用的单元测试框架JUnit和TestNG,JUnit以其简洁注解受到青睐,而TestNG则提供更高级功能如参数化测试。常见问题包括测试未执行、断言失败等,解决办法包括检查项目配置、调整测试顺序。注意保持测试简单独立,确保高覆盖率。选择合适的框架可提升代码质量。
24 0
|
19天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
|
19天前
|
Java 索引
Java新手导航:一文掌握流程控制
Java新手导航:一文掌握流程控制
10 0