【Java应用】使用Mockito进行模拟和测试桩

这篇具有很好参考价值的文章主要介绍了【Java应用】使用Mockito进行模拟和测试桩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mockito是一个流行的Java模拟框架,用于编写单元测试代码时模拟(mock)和测试桩(stub)对象的行为。可轻松模拟Java类和接口的行为,帮助测试人员和开发人员更好地设计和执行单元测试。

使用Mockito,开发人员可以模拟一个对象,使其表现出某些预期的行为,而无需使用真实对象。这种技术通常用于在不使用复杂的集成测试环境的情况下测试代码。Mockito可以协助进行单元测试、集成测试和行为驱动开发(BDD)。

一、Mockito基础知识

1、Mockito的优点

使用简单:Mockito的API简单明了,易于学习和使用。

支持多种场景:Mockito支持各种测试场景,如单元测试、集成测试和BDD等。

良好的文档:Mockito拥有全面的文档和用户群体,可以提供许多使用方案和实例。

2、Mockito的局限性

不支持静态方法和final方法的模拟。

可能会过度使用,导致测试代码的维护难度增加。

3、Mockito的常见概念

Mock:指一个对象的虚拟实现,具有与真实对象相同的方法和属性,但不会真正执行其中的方法。

Stub:指为某个方法调用提供预定义返回值的代码,通常用于控制测试中的代码路径。

Verify:指验证Mock对象是否按照预期进行了交互。Verify可用于验证Mock对象的方法是否被调用了特定的次数,并且传入了预期的参数。

4、Mockito的常见用法

创建Mock对象

List mockList = mock(List.class);

Stub方法调用

when(mockList.get(0)).thenReturn("first");

验证方法调用

verify(mockList).add("one");

模拟方法抛出异常

when(mockList.get(anyInt())).thenThrow(new RuntimeException());

模拟连续调用

Mockito提供了许多其他功能,如ArgumentMatchers用于匹配方法调用的参数、Annotations用于对Mock对象进行注释、Spy用于监视真实对象等等。通过学习和掌握Mockito的使用,可以更加高效地进行单元测试和集成测试。

二、使用Mockito进行模拟

1、使用Mockito进行模拟的步骤和示例

Mockito可以通过模拟对象来测试代码,步骤如下:

导入Mockito库。在pom.xml文件中添加以下依赖:

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.12.4</version>
<scope>test</scope>
</dependency>

创建要测试的类和方法

public class UserService {
private UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
public User getUserById(int id) {
return userDao.getUserById(id);
}
}
public interface UserDao {
User getUserById(int id);
}

创建一个模拟对象

UserDao userDao = mock(UserDao.class);

设置模拟对象的行为

when(userDao.getUserById(1)).thenReturn(new User(1, "John"));

运行测试代码

@Test
public void testGetUserById() {
UserDao userDao = mock(UserDao.class);
when(userDao.getUserById(1)).thenReturn(new User(1, "John"));
UserService userService = new UserService(userDao);
User user = userService.getUserById(1);
assertEquals(user.getId(), 1);
assertEquals(user.getName(), "John");
}

2、使用when()

Mockito的when()方法可以用于设置模拟对象的行为,例如:

when(mockObject.someMethod()).thenReturn(someValue);

示例代码:

@Test
public void testGetUserById() {
UserDao userDao = mock(UserDao.class);
when(userDao.getUserById(1)).thenReturn(new User(1, "John"));
UserService userService = new UserService(userDao);
User user = userService.getUserById(1);
assertEquals(user.getId(), 1);
assertEquals(user.getName(), "John");
}

3、使用doReturn()

doReturn()方法与when()方法类似,可以用于设置模拟对象的行为,例如:

doReturn(someValue).when(mockObject).someMethod();

示例代码:

@Test
public void testGetUserById() {
UserDao userDao = mock(UserDao.class);
doReturn(new User(1, "John")).when(userDao).getUserById(1);
UserService userService = new UserService(userDao);
User user = userService.getUserById(1);
assertEquals(user.getId(), 1);
assertEquals(user.getName(), "John");
}

4、使用mock()方法创建模拟对象

mock()方法可以用于创建模拟对象,例如:文章来源地址https://www.toymoban.com/news/detail-508072.html

SomeClass mockObject = mock(SomeClass.class);

到了这里,关于【Java应用】使用Mockito进行模拟和测试桩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JUnit 5单元测试(三)—— Mockito 模拟

    上一篇讲了 JUnit 5单元测试(二)—— 断言,书接上文开始 JUnit 5单元测试(三)—— Mockito 模拟 想象下面这几种情况你该怎么单元测试: 1.A方法去数据库查询了数据进行了一些处理,该怎么单元测试; 2.在微服务项目中,A方法中调用了远程微服务B方法(或者B方法还没写好

    2024年02月15日
    浏览(51)
  • Junit4 + Mockito进行单元测试实战案例

    ​ 实战代码案例: ​​​​​​​​​​​ 注意:idea2021.3.3之前的版本都搜索不到这个插件。 使用TestMe自动生成单元测试代码: 不是自动化执行的单元测试都是无意义的,项目中那么多单测,难道一个一个点吗? 引入maven-surefire-plugin插件用于自动化执行单测。 include里表

    2024年02月16日
    浏览(53)
  • 使用Mockito模拟Static静态方法

    Mockito3.4.0版本之后增加了对Static方法的支持,在这里简单记录下Mockito.mockStatic方法的用法 这是待测试的方法,用到了TestUtil.getString这个静态方法,将使用Mockito改变他的返回值 测试方法使用到的静态方法 他返回字符串本身,我们将通过Mockito改变他的返回值 Junit测试代码,执

    2024年02月02日
    浏览(41)
  • Java单元测试之Mockito

    Mockito是一种Java Mock框架,主要就是用来做Mock测试的,它可以模拟任何Spring管理的Bean、模拟方法的返回值、模拟抛出异常等等,同时也会记录调用这些模拟方法的参数、调用顺序,从而可以校验出这个Mock对象是否有被正确的顺序调用,以及按照期望的参数被调用。 Mockito的特

    2024年02月13日
    浏览(50)
  • 搭建大型分布式服务(四十六)利用mockito不启动SpringBoot项目下进行单元测试

    SpringBoot支持集成Mockito做单元测试,有时候SpringBoot有很多外部依赖,在本地很难启动或者启动时间很长,而我们只想对某个方法进行测试,需要怎样做呢? 一、本文要点 接前文,我们已经已介绍在两种mock模式下,怎样根据入参返回自定义mock结果,但都是通过启动SpringBoot项

    2024年02月06日
    浏览(45)
  • Java单元测试浅析(JUnit+Mockito)

    Java测试我们应该都遇到过,一般我们会被要求做单元测试,来验证我们代码的功能以及效率。 这里来和大家一起探讨下有关单于测试。 是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单

    2024年02月06日
    浏览(62)
  • 渗透测试模拟(使用sqlmap进行sql注入漏洞判断,利用该漏洞进行挂马)

    环境:对某网站进行渗透测试。 (PHP+Mysql开发的网站,用于WEB漏洞教学和检测的) 工具:sqlmap(Kali Linux中自带or官网下载Windows版) 此次实验所涉及的sqlmap参数: 一、信息收集 二、漏洞挖掘 (1)判断网站是否存在sql注入漏洞 使用工具,sqlmap: sqlmap -u \\\"目标网站地址\\\" --ba

    2024年02月15日
    浏览(46)
  • 【单元测试】Mockito使用详解

    一个单元测试应该有如下特点: 应该是自动化的 应该可以快速运行 每个单元测试不应该依赖其它测试的结果和执行顺序,单元测试框架可以按任意的顺序执行每个测试 每个单元测试不应该依赖数据库,外部文件,或者任何长时间运行的任务。单元测试应该是独立的,不应该

    2024年04月15日
    浏览(87)
  • Mockito单元测试基本使用

    本文参考: 【码农教程】手把手教你Mockito的使用 - 掘金 (juejin.cn) java - doReturn().when()与when().thenReturn() - 成长之路 - SegmentFault 思否 单元测试实践篇:Mock_阿里巴巴淘系技术团队官网博客的博客-CSDN博客 阿里是如何进行单元测试培训的?_Hollis Chuang的博客-CSDN博客 【Mockito】Mock

    2024年02月10日
    浏览(50)
  • [ARM 汇编]高级部分—性能优化与调试—3.4.3 使用模拟器进行调试与测试

    在ARM汇编程序开发过程中,使用模拟器(emulator)进行调试和测试是一种非常有效的方法。模拟器可以在不同的处理器上测试代码,帮助我们发现潜在的问题,并提供丰富的调试功能。本节将介绍如何使用QEMU(一个流行的开源模拟器)进行ARM汇编程序的调试和测试。 安装QE

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包