《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(4)

简介: 《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(4)

《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(3) https://developer.aliyun.com/article/1232478?groupCode=java



四、 when语句


1. when().thenReturn()模式

 

声明:

 

PowerMockito.when(mockObject.someMethod(someArgs)).thenReturn(expectedValue);

 

PowerMockito.when(mockObject.someMethod(someArgs)).thenThrow(expectedThrowable);

 

PowerMockito.when(mockObject.someMethod(someArgs)).thenAnswer(expectedAnswer);

 

PowerMockito.when(mockObject.someMethod(someArgs)).thenCallRealMethod();

 

用途:用于模拟对象方法,先执行原始方法,再返回期望的值、异常、应答,或调用真实的方法。


1) 返回期望值


image.png

2) 返回期望异常


image.png

3) 返回期望应答

image.png

4) 调用真实方法

image.png


2. doReturn().when()模式

 

声明:

 

PowerMockito.doReturn(expectedValue).when(mockObject).someMethod(someArgs);

 

PowerMockito.doThrow(expectedThrowable).when(mockObject).someMethod(someArgs);

 

PowerMockito.doAnswer(expectedAnswer).when(mockObject).someMethod(someArgs);

 

PowerMockito.doNothing().when(mockObject).someMethod(someArgs);

 

PowerMockito.doCallRealMethod().when(mockObject).someMethod(someArgs);

用途:用用于模拟对象方法,直接返回期望的值、异常、应答,或调用真实的方法,无需执行原始方法。

 

注意千万不要使用以下语法虽然不会出现编译错误,但是在执行时会抛出UnfinishedStubbingException异常。

 

PowerMockito.doReturn(expectedValue).when(mockObject.someMethod(someArgs));

 

PowerMockito.doThrow(expectedThrowable).when(mockObject.someMethod(someArgs));

 

PowerMockito.doAnswer(expectedAnswer).when(mockObject.someMethod(someArgs));

 

PowerMockito.doNothing().when(mockObject.someMethod(someArgs));

 

PowerMockito.doCallRealMethod().when(mockObject.someMethod(someArgs));

 

1) 返回期望值

image.png

2) 返回期望异常

image.png

3) 返回期望应答

image.png

4) 模拟无返回值

image.png

5) 调用真实方法

image.png

3. 两种模式的主要区别

 

两种模式都用于模拟对象方法,在mock实例下使用时,基本上是没有差别的。但是,在spy实例下使用时,when().thenReturn()模式会执行原方法,而doReturn().when()模式不会执行原方法。

 

测试服务类:

image.png

使用when().thenReturn()模式:

image.png

在测试过程中,将会打印出“调用获取用户数量方法”日志。

 

使用doReturn().when()模式:

image.png

 在测试过程中,不会打印出“调用获取用户数量方法”日志。

 

4. whenNew模拟构造方法

 

声明:

 

PowerMockito.whenNew(MockClass.class).withNoArguments().thenReturn(expectedObject);

 

PowerMockito.whenNew(MockClass.class).withArguments(someArgs).thenReturn(expectedObject);

 

用途:用于模拟构造方法。


案例:


image.png

注意需要加上注解@PrepareForTest({FileUtils.class}),否则模拟方法不生效。




《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(5) https://developer.aliyun.com/article/1232475?groupCode=java

 

相关文章
|
1天前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
11 5
|
4天前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
23 6
|
1天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
11 2
|
4天前
|
IDE Java 测试技术
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
11 1
|
3天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
【7月更文挑战第11天】页面对象模型(POM)通过Page Factory在Java Selenium测试中被应用,简化了代码维护。在POM中,每个网页对应一个Page Class,其中包含页面元素和相关操作。对比之下,非POM实现直接在测试脚本中处理元素定位和交互,代码可读性和可维护性较低。
|
4天前
|
IDE Java 测试技术
Java面试题:描述在Java中使用JUnit进行单元测试的过程
Java面试题:描述在Java中使用JUnit进行单元测试的过程
9 0
|
5天前
|
算法 Java 开发者
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
8 0
|
14天前
|
JSON JavaScript 测试技术
Postman接口测试工具详解
Postman接口测试工具详解
25 1
|
3天前
|
XML JSON 测试技术
Postman接口测试工具详解
📚 Postman全攻略:API测试神器!📚 发送HTTP请求,管理集合,写测试脚本,集成CI/CD。从安装配置到环境变量、断言、数据驱动测试,一步步教你如何高效测试RESTful API。实战案例包含GET、POST、PUT、DELETE请求。用Newman在命令行跑集合,自动化测试不发愁!👉 [洛秋小站](https://www.luoqiu.site/) 学更多!🚀
13 1
|
11天前
|
数据采集 测试技术
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
14 2