mockito 使用

在编写单元测试时 ,必须记住不要依赖于外部组件。 为了避免这种情况,我们使用了模拟框架,对我而言,最容易使用的是Mockito
在本文中,我们将看到在Mockito中使用的一种“高级”技术,可以使用Answer接口在模拟方法上返回相同的参数实例。

假设我们正在为管理PersonJob类的类编写单元测试,并且在操作中它使用DAO类在Person和Job之间插入称为PersonJob的关系类(M:N)。
例如,正在测试的类如下所示:

public PersonJob createPersonJob(Person person, Job job) {..  some job .. PersonJob personJob = new PersonJob(person, job);return  this.personJobDao.create(personJob);}

因此,在这种情况下,您似乎需要嘲笑personJobDao
让我们创建模拟并记录交互:

public class WhenAJobIsAssignedToPerson {@Testpublic void relationship_should_be_made_persistent() {PersonJobDao personJobDao = mock(PersonJobDao.class);when(personJobDao.create(any(PersonJob.class))).thenReturn(???)PersonJobManager personJobManager = new PersonJobManager();personJobManager.setPersonJobDao(personJobDao);Person person = new Person();Job job = new Job();PersonJob personJob = personJobManager.createPersonJob(person, job);assertThat(personJob.getPerson(), is(person));assertThat(personJob.getJob(), is(job));}}

是的,您会看到您不知道要返回什么,因为实例是由被测类创建的,并且在测试方法中,您也不知道哪个实例是由createPersonJob方法创建的。 要解决此问题,您需要使用thenAnswer而不是thenReturn方法:

public class WhenAJobIsAssignedToPerson {@Testpublic void relationship_should_be_made_persistent() {PersonJobDao personJobDao = mock(PersonJobDao.class);when(personJobDao.create(any(PersonJob.class))).thenAnswer(new Answer<PersonJob>() {public PersonJob answer(InvocationOnMock invocation)throws Throwable {return (PersonJob) invocation.getArguments()[0];}});PersonJobManager personJobManager = new PersonJobManager();personJobManager.setPersonJobDao(personJobDao);Person person = new Person();Job job = new Job();PersonJob personJob = personJobManager.createPersonJob(person, job);assertThat(personJob.getPerson(), is(person));assertThat(personJob.getJob(), is(job));}}

需要注意的是回答接口需要您实现答案的方法,这在我们的情况下,简单地返回personJobDao的第一个参数(PersonJob实例)。 创建方法。

现在,我们可以安心编写断言,而不必担心返回的实例。

参考:在One Jar To Rule Them All博客上与 JCG合作伙伴 Alex Soto的Mockito进行回答 。

翻译自: https://www.javacodegeeks.com/2012/07/answering-with-mockito.html

mockito 使用

mockito 使用_用Mockito回答相关推荐

  1. mockito 外部接口_【IDEA开发SpringBoot2.0】使用Mockito进行常规接口测试#05

    文章目录 前言[^1] 什么是Mockito? 什么是Mock? 为什么要使用Mock? 用PostMan与用Mock有什么区别? 正题 使用Mockito做一个模拟测试 编写代码 开始测试 代码讲解 ...

  2. mockito 静态_在Java 8中使用不带静态导入的Mockito

    mockito 静态 如何通过在基于Java 8的项目中删除静态导入来简化Mockito的使用. 基本原理 Mockito API基于(BDD)Mockito类中聚集的静态方法(大部分),然后进行非常 ...

  3. mockito 单元测试_使用FizzBu​​zz和Mockito进行单元测试

    mockito 单元测试 我有时使用FizzBu​​zz向新手演示单元测试的基础. 尽管FizzBu​​zz确实是一个简单的问题,但它也可以用于演示更高级的单元测试技术,例如模拟 . FizzBu​​ ...

  4. mockito接口_什么是Mockito Extra接口?

    mockito接口 如果要编写轻量级的JUnit测试, Mockito是我最喜欢的小帮手. 如有必要,可以通过模拟轻松地替换被测单元的"实际"依赖关系,这非常有用. 特别是在处理框 ...

  5. mockito模拟依赖注入_使用Mockito模拟自动装配的字段

    mockito模拟依赖注入 依赖注入是诸如Spring和EJB之类的Control容器反转的非常强大的功能. 将注入的值封装到私有字段中总是一个好主意. 但是,自动连线字段的封装会降低可测试性. 我喜 ...

  6. mockito java_Java:使用Mockito模拟ResultSet

    mockito java 这篇文章展示了如何使用Mockito模拟java.sql.ResultSet . 它可用于帮助对ResultSet进行操作的单元测试代码(例如ResultSetExtract ...

  7. Mockito教程:使用Mockito进行测试和模拟

    课程大纲 Mockito是根据MIT许可证发布的Java开源测试框架,该框架允许在自动化单元测试中创建测试双重对象(模拟对象),以实现测试驱动开发(TDD)或行为驱动开发(BDD)的目的. 如官方文档 ...

  8. Mockito verify Junit5集成 Mockito

    Mockito 集成 Junit5 在学习Mockito 如何集成 Junit5 之前,先来学习下 Mockito 基础的verify功能. Maven依赖 本篇博客代码的Maven依赖如下,源码地址 ...

  9. 马化腾提问_互联网融合创新会带来哪些改变_知乎回答部分总结

    马化腾(知乎账号ponyma)的提问: 未来十年哪些基础科学突破会影响互联网科技产业?产业互联网和消费互联网融合创新,会带来哪些改变? 节选三网相关的部分回答: 目录 1      关于带宽的意义 2 ...

最新文章

  1. 使用Oracle instantClient代替Oracle Client安装
  2. 如何快速将PointPoint导入CSDN?
  3. 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之二
  4. python自动化框架2019_《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!...
  5. [Study Notes][001][gstreamer] memory
  6. UIButton、UIImageView、UILabel的选择
  7. TensorFlow框架案例实战
  8. linux [1045] Access denied for user 'root'@'localhost' (using password: YES)
  9. 汇编程序实现快速排序_用Python 3实现快速排序和插入排序代码详解
  10. 基于 Java 机器学习自学笔记 (第71-73天:BP神经网络)
  11. 如何把字幕文件转换成txt文件或word文档,.ass文件内容怎么提取出来txt文件
  12. 2022年,尽量还是别裸辞了吧···
  13. Fe3O4 NPs@MIL-53|NH2-MIL-53(Sc)|NH2-MIL-53(Al)|NH2-MIL-125负载银钴合金纳米材料|氨基化mof材料
  14. python把所有txt文件整合在一起(步道乐跑题库)
  15. MyBatis Plus 看这篇就够了,一发便入魂!
  16. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障---08
  17. zbrush常用笔刷_zbrush笔刷大合集
  18. linux下不让使用rm命令
  19. 如何用python处理pdf_用Python处理PDF
  20. 微信内置浏览器屏蔽网页链接怎么办,微信跳转外部浏览器的实现教程

热门文章

  1. JSP2.0中的表达式语言(EL表达式)
  2. Java成神之路技术整理
  3. 分布式一致性算法:可能比你想象得更复杂
  4. java8 hash算法
  5. mysql分组查询的两类
  6. 2016蓝桥杯省赛---java---C---10(密码脱落)
  7. tomcat中配置jndi数据源以便spring获取
  8. 谷粒商城RabbitMQ设计思想详解:消息队列双重保险设计
  9. Sprng boot(十三):Spring boot 小技巧
  10. 文档在线签名_为什么需要为文档和合同切换到在线签名