mockito无效

Most of the times Mockito when() method is good enough to mock an object’s behavior. But when we have to mock a void method, we can’t use when().

大多数时候,Mockito when()方法足以模拟对象的行为。 但是,当我们必须模拟void方法时,就不能使用when()

Mockito模拟无效方法 (Mockito Mock Void Method)

Mockito provides following methods that can be used to mock void methods.

Mockito提供了以下可用于模拟void方法的方法。

  1. doAnswer(): We can use this to perform some operations when a mocked object method is called that is returning void.doAnswer() :当调用返回空值的doAnswer()对象方法时,我们可以使用它执行一些操作。
  2. doThrow(): We can use doThrow() when we want to stub a void method that throws exception.doThrow() :当我们想存根引发异常的void方法时,可以使用doThrow()。

Let’s create a simple class with a void method that we will mock in our test classes.

让我们创建一个带有void方法的简单类,该类将在测试类中进行模拟。

package com.journaldev;public class Employee {private String name;public String getName() {return name;}public void setName(String name) {if (name == null)throw new IllegalArgumentException("Employee Name can't be null");this.name = name;}}

Mockito模拟无效方法示例 (Mockito mock void method example)

Mockito doAnswer() method takes Answer as argument. It’s a functional interface so we can use lambda expression for its implementation.

Mockito doAnswer()方法将Answer作为参数。 这是一个功能接口,因此我们可以使用lambda表达式实现其功能。

doAnswer((i) -> {System.out.println("Employee setName Argument = " + i.getArgument(0));assertTrue("Pankaj".equals(i.getArgument(0)));return null;
}).when(emp).setName(anyString());

Notice that return null statement is required since we are mocking void method.

注意,因为我们在模拟void方法,所以需要return null语句。

Mockito模拟无效方法与异常 (Mockito mock void method with exception)

Below code snippet shows how to use doThrow() method to mock void methods with the exception.

下面的代码片段显示了如何使用doThrow()方法来模拟带有异常的void方法。

doThrow(IllegalArgumentException.class).when(emp).setName(null);

JUnit Mockito模拟void方法示例 (JUnit Mockito mock void method example)

Here is a complete example in JUnit where I am using Mockito to mock void method.

这是我使用Mockito模拟void方法的JUnit中的完整示例。

package com.journaldev.mockito.voidmethod;import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;import org.junit.jupiter.api.Test;import com.journaldev.Employee;class JUnitMockitoVoidMethod {@Testvoid test_mockito_void() {Employee emp = mock(Employee.class);doThrow(IllegalArgumentException.class).when(emp).setName(null);doAnswer((i) -> {System.out.println("Employee setName Argument = " + i.getArgument(0));assertTrue("Pankaj".equals(i.getArgument(0)));return null;}).when(emp).setName(anyString());when(emp.getName()).thenReturn("Pankaj");assertThrows(IllegalArgumentException.class, () -> emp.setName(null));emp.setName("Pankaj");assertEquals("Pankaj", emp.getName());}}

TestNG Mockito无效方法示例 (TestNG Mockito void method example)

Since JUnit 5 and TestNG annotations are so similar, we don’t have to any code specific changes in above class to switch from JUnit 5 to TestNG.

由于JUnit 5和TestNG批注是如此相似,因此我们不必在上述类中进行任何代码特定的更改即可从JUnit 5切换到TestNG。

Just remove the JUnit 5 import statements and add below imports to change testing framework from JUnit to TestNG.

只需删除JUnit 5导入语句并添加以下导入,即可将测试框架从JUnit更改为TestNG。

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertThrows;
import static org.testng.Assert.assertTrue;import org.testng.annotations.Test;
GitHub Repository.GitHub Repository下载完整的项目代码。

翻译自: https://www.journaldev.com/21834/mockito-mock-void-method

mockito无效

mockito无效_Mockito模拟无效方法相关推荐

  1. mockito 静态方法_Mockito模拟静态方法– PowerMock

    mockito 静态方法 Mockito allows us to create mock objects. Since static method belongs to the class, the ...

  2. mockito入门_Mockito入门

    mockito入门 本文是我们名为" 用Mockito测试 "的学院课程的一部分. 在本课程中,您将深入了解Mockito的魔力. 您将了解有关"模拟",&qu ...

  3. 如何使用Mockito模拟void方法

    如何用void返回类型模拟方法? 我实现了一个观察者模式,但是我不能用Mockito模拟它,因为我不知道怎么做. 我试图在互联网上找到一个例子,但没有成功. 我的课看起来像这样: public cla ...

  4. edittext 监听无效_Android中EditText 设置 imeOptions 无效问题的解决方法

    有时候我们需要在EditText  输出完之后 需要在键盘出现 右下角变成"Go"或"前往 搜索时:通常我们需要设置Android:imeOptions属性.Androi ...

  5. vscode格式化代码无效--可能的解决方法

    vscode格式化代码无效--可能的解决方法 参考文章: (1)vscode格式化代码无效--可能的解决方法 (2)https://www.cnblogs.com/code1992/p/8657985 ...

  6. 尝试连接到服务器时出错请检查虚拟机管理器,Hyper-V尝试连接到服务器出错无效类的解决方法...

    Hyper-V尝试连接到服务器出错无效类的解决方法 Windows10安装Hyper-V后没有自动连接到本地计算机,手工连接失败,提示: 引用内容 尝试连接到服务器"DESKTOP-6P9L ...

  7. ThinkPHP6项目基操(4.拦截无效请求 控制器或方法不存在)

    拦截无效请求 控制器或方法不存在 一.默认无效请求 二.显示具体错误信息 方法1.配置`config/app.php` 方法2. 配置`.env`环境变量 三.处理错误 1. 方法不存在 2. 控制器 ...

  8. java mock void_如何使用Mockito模拟void方法 - How to mock void methods with Mockito

    问题: How to mock methods with void return type? 如何用void返回类型模拟方法? I implemented an observer pattern bu ...

  9. Windows10 Ubuntu18.04 双系统下修复GRUB引导(亲测当boot-repair工具无效时,该方法完美解决)

    Windows10 Ubuntu18.04 双系统下修复GRUB引导(亲测当boot-repair工具无效时,该方法完美解决) 0.准备条件 1.问题描述: 2.修复Ubuntu18.04的引导 0. ...

最新文章

  1. 超越梦想,追求卓越——图灵五周年生日聚会圆满成功
  2. RPM包制作之Spec文件详解
  3. XML篇---可配置化的取值方式[便于维护]
  4. Aop事务小结(事务管理器和自身构建)
  5. 28和lba48命令格式区别_linux硬盘分区、格式化、挂载超详细步骤
  6. 【Android视图效果】共享元素实现仿微信查看大图效果
  7. Python面向对象(一)
  8. 后端技术:mybatis中resultMap用法示例笔记
  9. horizon client 无法识别域_「领域驱动设计DDD」事件风暴简介:实现域驱动设计的简便方法...
  10. mysql字符串结束符_mysql常见字符串处理函数结束
  11. Java基础之PDF文件的合并
  12. 电气计算机基础知识,电气基础知识
  13. 微信公众帐号中使用的QQ表情代码对照表
  14. python doc转pdf
  15. 项目周期所涉及到的文档控制说明
  16. HAL学习笔记-3 HAL库介绍
  17. 各种压缩格式介绍!(摘录2)
  18. 剑指XX游戏(七) - 不拼搏,枉少年
  19. Android Studio代码检查lint使用
  20. C语言学习记录——鹏哥二分法查找数组中元素 复习整理

热门文章

  1. 最多添加3个标签,每个标签最长6字,空格或逗号隔开
  2. 《面向对象程序设计》第六次作业(图形化界面)
  3. poj 2318 TOYS
  4. Spring自动扫描
  5. 为所有北京奥运冠军名字作诗(诗集)
  6. [转载] Python:Numpy详解
  7. Xfire的aegis绑定方式配置小结
  8. cv::KeyPoint中response的介绍
  9. IMU预积分公式推到及代码解析
  10. linux任务计划不执行时间,Linux任务计划、周期性任务执行