@InjectMocks修饰的对象,会创建一个真实对象,会调用真实方法(若方法中再调用对象中的其他方法时,也是调用真实方法)

package lesson13_14;import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.List;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;@RunWith(MockitoJUnitRunner.class)
public class ArgumentCaptorTest {@Mockprivate List<String> list;@Mockprivate UserDao userDao;@Captorprivate ArgumentCaptor<User> captorAnnotation;/*** @InjectMocks作用:* 1.构造注入:*   通过UserService的构造函数将Mock的userDao注入UserService,等价于UserService userService = new UserService(userDao);* 2.会调用修饰对象的真实方法* */@InjectMocksUserService userService;@Testpublic void test() {ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);when(list.add("test")).thenReturn(true);list.add("test");verify(list).add(captor.capture());assertThat(captor.getValue(), equalTo("test"));}@Testpublic void test2() {User user = new User(1);when(userDao.delUser(user)).thenReturn(true);assertThat(userService.delUser(user), equalTo(true));assertThat(user.getType(), equalTo("D"));}@Testpublic void test3() {ArgumentCaptor<User> captor = ArgumentCaptor.forClass(User.class);User user = new User(1);when(userDao.delUser(user)).thenReturn(true);boolean result = userService.delUser(user);assertThat(result, equalTo(true));verify(userDao).delUser(captor.capture());assertThat(captor.getValue().getType(), equalTo("D"));}@Testpublic void testAnnotation() {User user = new User(1);when(userDao.delUser(user)).thenReturn(true);boolean result = userService.delUser(user);assertThat(result, equalTo(true));verify(userDao).delUser(captorAnnotation.capture());assertThat(captorAnnotation.getValue().getType(), equalTo("D"));}
}

package lesson13_14;public class UserService {private final UserDao userDao;public UserService(UserDao userDao) {this.userDao = userDao;}public boolean delUser(User user){user.setType("D");return userDao.delUser(user);}
}

package lesson13_14;public class UserDao {public boolean delUser(User user) {throw new RuntimeException();}
}

package lesson13_14;public class User {private final Integer id;private String type;public User(Integer id) {this.id = id;}public Integer getId() {return id;}public String getType() {return type;}public void setType(String type) {this.type = type;}@Overridepublic String toString() {return "User{" +"id=" + id +", type='" + type + '\'' +'}';}
}

13-14. @InjectMocks、@Captor、ArgumentCaptor、captor.capture()、captor.getValue()相关推荐

  1. 首批 iPhone 13 用户直呼太“坑”:​拍照有马赛克、不能用高刷、还与 Apple Watch “失联”?...

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) iPhone 13 到底香不香,早在 9 月 15 号的苹果秋季发布会上给了我们答案.对此,自然是仁者见仁智者见智:有人认为 iPhon ...

  2. 近期活动盘点:工业大数据讲座、大数据自杀风险感知讲座、数据法学研讨会、海外学者短期讲学(12.3-12.13)

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: 工业大数据分析:机会与挑战讲座 2017年12月6日 活动简介: 随着"中国制造2025"国家战略和"工业4 ...

  3. Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9、gcc-5 版本

    转载: http://www.cnblogs.com/BlackStorm/p/5183490.html Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9.gcc-5 版本 如果没 ...

  4. 14.利用虚函数实现多态性来求正方体、球体和圆柱体的表面积和体积。

    14.利用虚函数实现多态性来求正方体.球体和圆柱体的表面积和体积. 具体要求如下, 从正方体.球体和圆柱体的各种运算中抽象出一个公共基类container为抽象类, 在其中定义求表面积和体积的纯虚函数 ...

  5. (4.7-4.13)【大数据新闻速递】上海、广州、青海、贵阳大力发展大数据产业;2026年中国大数据市场规模预计达365亿美元

    01[贵阳大数据交易所发布全国首个交易激励计划] 4月6日,贵阳大数据交易所发布了"交易激励计划",旨在提高数据场内交易的吸引力,解决交易入场难的问题.该计划是落实<关于构建 ...

  6. 首批 iPhone 13 用户直呼太“坑”:​拍照有马赛克、与 Apple Watch “失联”、第三方 App 还不能用高刷?

    iPhone 13 到底香不香,早在 9 月 15 号的苹果秋季发布会上给了我们答案.对此,自然是仁者见仁智者见智:有人认为 iPhone 13 "加量不加价"挺划算,有人则认为 ...

  7. iOS 14.5.1 系统后出现了发烫、运行卡顿、跑分降低的解决方法

    不少 iPhone 11 和 iPhone 12 系列的用户反映,更新到苹果最新的 iOS 14.5.1 系统后出现了发烫.运行卡顿.跑分降低的问题. 我们可以通过以下方法来解决 打开设置 - App ...

  8. macOS Ventura 13.4.1 (22F82|22F2083) 正式版发布,ISO、IPSW、PKG 下载

    macOS Ventura 13.4.1 (22F82|22F2083) 正式版发布,ISO.IPSW.PKG 下载 本站下载的 macOS Ventura 软件包,既可以拖拽到 Applicatio ...

  9. (13.1.1)PMBOK之一:运营,项目、项目集、项目组合、组织战略及其管理

    一. 项目的定义与特性 临时性 独特性 渐进明细性 二. 运营 2.1 项目和运营的共性 2.2 项目和运营的差异 2.3 项目与运营具有相对性 2.3.1 项目与运营的承接关系 三.商业价值.组织战 ...

最新文章

  1. The world at your fingertips — 天涯明月刀幕后23(海战)
  2. python 映射和反映射_python映射类型的相关介绍
  3. 应用程序模块和实体缓存
  4. 搭建Zabbix Proxy HA
  5. 微软发布 VS Code Remote,开启远程开发新时代!
  6. vivox20 html阅读器,【vivoX20评测】屏幕:全面屏也得看显示素质_vivo X20_手机评测-中关村在线...
  7. 程序员的自我修养(序)-量子
  8. jquery_datatables
  9. Go语言 channel 管道 阻塞 死锁 经典问题
  10. 专家系统实例及其骨架系统
  11. 单片机原理及应用 C51编程 proteus仿真
  12. 用Python解读房贷利率,有没有套路?这是我见过最透彻的Python版解读!
  13. AspectJ+AJDT+用Ant管理AspectJ项目+AspectJ教程
  14. BOOT.BIN文件
  15. 51单片机最小系统原理图、PCB及组成原理详解
  16. VC浏览器相关的学习(七)(BHO捕获鼠标键盘事件)
  17. Python爬取热搜数据之炫酷可视化
  18. 6.13一天知识总结
  19. 用python爬取《龙岭迷窟》评论,看看比同系列鬼吹灯作品以及《盗墓笔记》好在哪里?
  20. 细粒度图像分析论文汇总

热门文章

  1. java.lang.IllegalStateException: No primary or default constructor found for interface java.util
  2. 程序员的一些忠告和反省
  3. flashlight问题调试
  4. Python基础练习——输出质数
  5. Android Studio 技巧之【Move Lines Up Down】
  6. 漂亮的大屏主视觉ui设计
  7. 【PA2014】【BZOJ3709】Bohater
  8. MM32F103空气质量检测仪
  9. 洞察与思考Fuzzing技术发展趋势
  10. CUDA编程基础:如何实现c++事实绘制曲线,采用的绘图工具箱是:gnuplot