Mockito –使用全局配置的SmartNull在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 –使用全局配置的SmartNull在NPE上提供更好的错误消息相关推荐
- mockito环境配置_Mockito –使用全局配置的SmartNull在NPE上提供更好的错误消息
mockito环境配置 编写Mockito参考卡后,我有机会仔细研究了Mockito不太流行但非常有用的功能. 其中一些过于先进或太稀少,无法在refcard中进行描述,因此应简短说明. 其中之一就是 ...
- 【微信小程序】-- 全局配置 -- window - 下拉刷新 上拉触底(十六)
- npm全局环境变量配置,全局配置cnpm
今天新电脑想安装node.js , 发现最新版本的node.js已经不支持win7了,但是又不想换系统,所以找了个旧版本,这里不多说了.如果找不到旧版本的node下载,可以去我的QQ交流群文件里面下载 ...
- git 修改全局配置
2019独角兽企业重金招聘Python工程师标准>>> bash 命令 git config --global --list 查看 所有全局配置 添加全局配置 git ...
- Keepalived全局配置
全局配置 包括两个子配置 全局定义,global definition 静态地址路由,static ipaddress/routes 全局定义 主要设置Keepalived的通知机制和标识 globa ...
- get request uni 参数_uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装...
1.环境配置 (可参考uni-官网的环境配置) common文件夹下新建config.js let url_config = "" if(process.env.NODE_ENV ...
- nginx 全局配置
nginx 全局配置 #user nobody; # user 主模块 ,指定nginx worker 进程的运行用户组 worker_processes 1; # worker_processes ...
- Zurmo - - 全局配置
简介:Zurmo的很多功能都是通过配置的形式来完成,有 全局的配置(metadata) 每个模块独立的配置(metadata) 全局配置的一些功能体现在,顶部的导航行,最左边的导航行等等,这些都是公共 ...
- python怎么定义全局字典_一种Python全局配置规范以及其魔改
0x01 模块 or global 很多初学者有个误区,就是在Python中需要配置一个全局的参数时,首先想到的是global关键字,而实际上global不是干这个事的,global的功能是在将局部作 ...
最新文章
- setHeadAndPropagate
- 基于Elasticsearch实现搜索推荐
- ubuntu 安装 swoole 和mac 安装swoole 扩展
- 1423. 可获得的最大点数
- c语言编写的程序不具备移植性,《C语言》试卷1
- [2018.10.15 T1] 或
- trajan割点模板
- 设计一套前端项目组织结构
- 基于OneDNS实现上网安全防护和监控
- webdriver中的等待——主要讲解WebDriverWait()
- matlab图上输入希腊字母,Matlab中给图形添加【希腊字母】
- Android缓存,删除网络依赖包缓存
- 手机芯片份额证明苹果跃升,华为腰斩
- 转载linux一句话精彩问答
- DNS劫持与路由器DNS劫持漏洞详解(附防护方法)
- 想要4个9?本文告诉你监控告警如何做
- JAVA开发运维(nginx工作原理)
- 阿里巴巴直播内容风险防控中的AI力量
- java变量重名问题
- 如何在ChinaRen校友录中免费发多彩留言
热门文章
- kafka可靠数据传递
- NanoHTTPD web server的一个简单荔枝
- gateway坑点:gateway有Controller时会直接处理对应的路径并返回
- 分解因数 递归_递归分解WAR文件
- 世界是沙粒还是宇宙_看到一个沙粒世界:再一次你好世界
- docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序
- spark在服务器运行示例_创建示例HTTPS服务器以获取乐趣和收益
- 虚拟机间延迟测量_简单的类来测量延迟
- jvmti_拥有您的堆:使用JVMTI迭代类实例
- jboss fuse 教程_在JBoss Fuse / Fabric8 / Karaf中使用Byteman