《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

 

相关文章
|
6天前
|
Java
PTA帅到没朋友(Java语言)+测试点
PTA帅到没朋友(Java语言)+测试点
12 1
|
1天前
|
JavaScript 前端开发 Java
《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)
【5月更文挑战第13天】本文主要讨论了在Selenium自动化测试中如何处理前端隐藏元素的问题。隐藏元素通常是通过`type="hidden"`或`style="display: none;"`属性实现的,它们在页面上不可见,但仍然存在于HTML代码中。Selenium可以定位到这些隐藏元素,但无法直接进行点击、输入等操作,会报错“ElementNotInteractableException”。
18 3
|
2天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【5月更文挑战第19天】多线程编程是Java中的一个重要概念,它允许程序员在同一时间执行多个任务。本文将介绍Java多线程的基础知识,包括线程的创建、启动和管理,以及如何通过多线程提高程序的性能和响应性。
|
2天前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
【5月更文挑战第12天】本文介绍了WebDriver中用于判断元素状态的三个方法:`isEnabled()`、`isSelected()`和`isDisplayed()`。`isSelected()`检查元素是否被选中,通常用于勾选框。`isDisplayed()`则用来判断元素是否在页面上可见。`isEnabled()`方法确定元素是否可操作,例如是否能点击或输入内容。
11 1
|
3天前
|
存储 JavaScript Java
《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
【5月更文挑战第11天】WebDriver 的 `isDisplayed()` 方法用于检查页面元素是否可见,如果元素存在于DOM中且可视,返回`true`,否则返回`false`。在自动化测试中,这个方法常用于验证元素是否真正显示在页面上。示例代码展示了如何使用 `isDisplayed()` 判断百度登录页面的特定错误提示文字是否出现。
14 1
|
4天前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
4天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
15 2
|
5天前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
11 0
|
5天前
|
Java 测试技术
Java一分钟之-单元测试:JUnit与TestNG
【5月更文挑战第16天】本文介绍了Java常用的单元测试框架JUnit和TestNG,JUnit以其简洁注解受到青睐,而TestNG则提供更高级功能如参数化测试。常见问题包括测试未执行、断言失败等,解决办法包括检查项目配置、调整测试顺序。注意保持测试简单独立,确保高覆盖率。选择合适的框架可提升代码质量。
11 0
|
6天前
|
消息中间件 并行计算 Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第15天】 在现代计算机编程中,多线程是一个复杂但必不可少的概念。特别是在Java这种广泛使用的编程语言中,理解并掌握多线程编程是每个开发者必备的技能。本文将深入探讨Java中的多线程编程,从基础概念到实际应用场景,为读者提供全面的理论支持和实践指导。

热门文章

最新文章