编写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 –使用全局配置的SmartNull在NPE上提供更好的错误消息相关推荐

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

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

  2. 【微信小程序】-- 全局配置 -- window - 下拉刷新 上拉触底(十六)

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

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

  4. git 修改全局配置

    2019独角兽企业重金招聘Python工程师标准>>> bash 命令 git config --global --list         查看 所有全局配置 添加全局配置 git ...

  5. Keepalived全局配置

    全局配置 包括两个子配置 全局定义,global definition 静态地址路由,static ipaddress/routes 全局定义 主要设置Keepalived的通知机制和标识 globa ...

  6. get request uni 参数_uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装...

    1.环境配置 (可参考uni-官网的环境配置) common文件夹下新建config.js let url_config = "" if(process.env.NODE_ENV ...

  7. nginx 全局配置

    nginx 全局配置 #user nobody; # user 主模块 ,指定nginx worker 进程的运行用户组 worker_processes 1; # worker_processes ...

  8. Zurmo - - 全局配置

    简介:Zurmo的很多功能都是通过配置的形式来完成,有 全局的配置(metadata) 每个模块独立的配置(metadata) 全局配置的一些功能体现在,顶部的导航行,最左边的导航行等等,这些都是公共 ...

  9. python怎么定义全局字典_一种Python全局配置规范以及其魔改

    0x01 模块 or global 很多初学者有个误区,就是在Python中需要配置一个全局的参数时,首先想到的是global关键字,而实际上global不是干这个事的,global的功能是在将局部作 ...

最新文章

  1. setHeadAndPropagate
  2. 基于Elasticsearch实现搜索推荐
  3. ubuntu 安装 swoole 和mac 安装swoole 扩展
  4. 1423. 可获得的最大点数
  5. c语言编写的程序不具备移植性,《C语言》试卷1
  6. [2018.10.15 T1] 或
  7. trajan割点模板
  8. 设计一套前端项目组织结构
  9. 基于OneDNS实现上网安全防护和监控
  10. webdriver中的等待——主要讲解WebDriverWait()
  11. matlab图上输入希腊字母,Matlab中给图形添加【希腊字母】
  12. Android缓存,删除网络依赖包缓存
  13. 手机芯片份额证明苹果跃升,华为腰斩
  14. 转载linux一句话精彩问答
  15. DNS劫持与路由器DNS劫持漏洞详解(附防护方法)
  16. 想要4个9?本文告诉你监控告警如何做
  17. JAVA开发运维(nginx工作原理)
  18. 阿里巴巴直播内容风险防控中的AI力量
  19. java变量重名问题
  20. 如何在ChinaRen校友录中免费发多彩留言

热门文章

  1. kafka可靠数据传递
  2. NanoHTTPD web server的一个简单荔枝
  3. gateway坑点:gateway有Controller时会直接处理对应的路径并返回
  4. 分解因数 递归_递归分解WAR文件
  5. 世界是沙粒还是宇宙_看到一个沙粒世界:再一次你好世界
  6. docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序
  7. spark在服务器运行示例_创建示例HTTPS服务器以获取乐趣和收益
  8. 虚拟机间延迟测量_简单的类来测量延迟
  9. jvmti_拥有您的堆:使用JVMTI迭代类实例
  10. jboss fuse 教程_在JBoss Fuse / Fabric8 / Karaf中使用Byteman