mockito环境配置

编写Mockito参考卡后,我有机会仔细研究了Mockito不太流行但非常有用的功能。 其中一些过于先进或太稀少,无法在refcard中进行描述,因此应简短说明。 其中之一就是SmartNull。 当前,非空方法返回适用于已知类型(例如:0,false,空集合)的“安全空值”,或者在其他情况下返回null。 可以返回SmartNull to而不是纯null来在NPE上收到更多描述性错误消息。

发生NullPointerException时,不仅是一行:

java.lang.NullPointerExceptionat PlantWaterer.generateNPE(PlantWaterer.java:24)at DefaultValuesTest.shouldReturnNicerErrorMessageOnNPE(DefaultValuesTest.java:64)

我们还获得了描述性信息,说明未使用哪种方法:

org.mockito.exceptions.verification.SmartNullPointerException:
You have a NullPointerException here:
?> at PlantWaterer.generateNPE(PlantWaterer.java: 24)
because this method call was ?not? stubbed correctly:
?> at PlantWaterer.generateNPE(PlantWaterer.java: 24)
wateringScheduler.returnNull();at PlantWaterer.generateNPE(PlantWaterer.java: 24)at DefaultValuesTest.shouldReturnNicerErrorMessageOnNPE(DefaultValuesTest.java:64)

可以指示特定的模拟返回SmartNull而不是null值:

PlantWaterer plantWatererMock =mock(PlantWaterer.class, Mockito.RETURNS_SMART_NULLS);

要么

@Mock(answer = Answers.RETURNS_SMART_NULLS)
private PlantWaterer plantWatererMock;

SmartNull可能是Mockito 2.0中的默认行为,但是为了实现1.9.x中的向后兼容性,必须明确告知每个模拟都使用它。 需要编写另一段样板代码导致几乎没有人使用SmartNull,尽管它是一个非常有用的功能。 Mockito的第二个几乎未知的元素进入了游戏-全局配置。 通常,不需要配置Mockito。 它只是工作。 但是在极少数情况下,框架的作者留下了一个门,该门允许覆盖一些核心行为的默认配置,包括未打桩方法的默认答案策略。

为了使其正常工作,有必要创建实现IMockitoConfiguration接口的org.mockito.configuration.MockitoConfiguration类( 必须在该软件包中 )。 通常,扩展DefaultMockitoConfiguration类并且仅覆盖所需的行为是很舒服的。

package org.mockito.configuration;import org.mockito.internal.stubbing.defaultanswers.ReturnsSmartNulls;
import org.mockito.stubbing.Answer;public class MockitoConfiguration extends DefaultMockitoConfiguration {public Answer<Object> getDefaultAnswer() {return new ReturnsSmartNulls();}
}

在准备之后,对于模块中的每个模拟,我们都应该获取带有详细输出的SmartNullPointerException而不是纯NullPointerException。

@Test(expectedExceptions = SmartNullPointerException.class)
public void shouldReturnNicerErrorMessageOnNPE() {//given//Mockito.RETURNS_SMART_NULLS not needed anymoreWateringScheduler wateringSchedulerMock = mock(WateringScheduler.class);WaterSource waterSourceMock = mock(WaterSource.class);PlantWaterer plantWatererMock =new PlantWaterer(waterSourceMock, wateringSchedulerMock);//whenplantWatererMock.generateNPE();//then//SmartNullPointerException exception expected
}

这篇文章是超越Mockito refcard系列的第一部分。

参考: 除了Mockito refcard之外-第1部分–来自Solid Soft博客的JCG合作伙伴 Marcin Zajaczkowski在全局配置的SmartNull上,在NPE上提供了更好的错误消息 。

翻译自: https://www.javacodegeeks.com/2012/07/mockito-better-error-messages-on-npe.html

mockito环境配置

mockito环境配置_Mockito –使用全局配置的SmartNull在NPE上提供更好的错误消息相关推荐

  1. Mockito –使用全局配置的SmartNull在NPE上提供更好的错误消息

    编写Mockito参考卡后,我有机会仔细研究了Mockito不太流行但非常有用的功能. 其中一些过于先进或太稀少,无法在refcard中进行描述,因此应简短说明. 其中之一就是SmartNull. 当 ...

  2. 理解BPDU Filtering的意义(BPDU Filtering在全局配置与接口配置上的区别)

    BPDU Filtering也叫BPDU过滤,它的意义是在某个端口上过滤BPDU的发送和接收,在这里需先要来理解一个前提:任何一个加入到生成树的交换机端口,都会发送并接收到相应的BPDU报文,其中包括 ...

  3. 计算机网络的全局模式是,全局配置模式-计算机网络精品课程网.PPT

    全局配置模式-计算机网络精品课程网 搭建配置环境 讲解人:朱建英 2010.07 章节目标 通过完成此章节课程,您将可以: ● 了解系统构架的功能 ● 根据需要选择配置环境 ● 搭建配置环境 议程:搭 ...

  4. 刷题小程序【程序猿面试宝典】开发(二)| 页面创建、页面配置、全局配置

    文章目录 1.创建页面 2.设置 tabBar 3.设置全局配置 window 4.设置页面相关配置 5.自定义全局CSS样式 6.自定义公共class样式 7.小试牛刀,全局设置页面背景色 8.结束 ...

  5. 命令行界面命令模式及相互切换、交换机命令行操作模式及模式间的切换过程、命令行界面基本功能、命令的快捷键功能、交换机基本配置命令、交换机特权模式下基本命令、交换机全局配置模式下基本命令、

    1.命令行界面命令模式及相互切换   锐捷交换机命令行管理界面分成若干不同的模式,用户当前所处的命令模式决定了可以使用的命令,不可跨模式执行命令.以下给出三种基本模式.   用户模式(User EXE ...

  6. jackson全局配置没有生效

    jackson全局配置没有生效 描述 复现 问题定位 解决 验证 结论 参考 描述 springboot项目中,在application.properties中配置了spring.jackson.da ...

  7. Cisco基础 交换机的各种配置模式和基本配置

    系列文章目录 第二章 Cisco基础 交换机的各种配置模式和基本配置交换机的基交换机的基本配置本配置 目录 系列文章目录 前言 一.交换机的各种配置模式 1.0 配置模式 1.1 特权模式 1.2 全 ...

  8. 配置系统初始化失败0 x84b10001当在Windows上安装SQL Server

    为了修复这个错误我们必须修改机器.配置文件.我们需要删除的配置部分包含所有的Windows Communication Foundation(WCF)ServiceModel配置元素.我至今仍不明白为 ...

  9. npm全局环境变量配置,全局配置cnpm

    今天新电脑想安装node.js , 发现最新版本的node.js已经不支持win7了,但是又不想换系统,所以找了个旧版本,这里不多说了.如果找不到旧版本的node下载,可以去我的QQ交流群文件里面下载 ...

最新文章

  1. java读取本地文件下载_java 读取本地的json文件
  2. FuncT,TResult的使用方法(转载)
  3. 横瓜执导众程序员开展大讨论关于C、JAVA及其它主流IT技术使用情况和优点缺点。...
  4. 【算法与数据结构】查找二叉树的实现
  5. POJ - 1050 To the Max(最大连续子段和,线性dp)
  6. maven使用OracleDB jdbc Driver
  7. netbeans工具栏字体太小
  8. 记一次 .NET医疗布草API程序 内存暴涨分析
  9. cf1562D Two Hundred Twenty One
  10. Java虚拟机(JVM)-1-内存区域
  11. Flex初学者群(54200135)共享资料清单-----2008.1.24
  12. PBRT的程序运行流程
  13. linux在用户登陆界面出现不断循环解决方法
  14. 可汗学院公开课:统计学笔记——基础知识、二项及泊松分布 、大数定律、正态分布
  15. 【愚公系列】2022年07月 Go教学课程 004-Go代码注释
  16. amesim子模型_AMESim进行实际物理建模及建模的一般过程
  17. Python爬虫:爬取网页图片
  18. 三个可替代“迅雷”的下载软件,速度超快!
  19. [立创传智黑马程序员CSDN]训练营——仿生机械狗
  20. 一、JSX语法的基本使用

热门文章

  1. mybatis中,collection配置后查询只显示一条记录
  2. 好玩的Scratch
  3. java实现遍历树形菜单方法——Dao层
  4. sql serve基础
  5. stream流把list转为map
  6. 集成Springboot----ElasticSearch
  7. android之微信分享音频
  8. 全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解
  9. mysql unique count_MySQL - Count Number of Unique Values
  10. linux-basic(11)认识和学习bash