Mockito –使用全局配置的SmartNull在NPE上提供更好的錯誤消息

編寫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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371978.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java使用js引擎時,關于時間的問題getTime()獲取為NAN的問題

在java中使用js引擎時&#xff0c;想要去獲取兩個時間的相差的天數&#xff0c;查找網上的辦法&#xff1a; var beginMonth parseInt(beginTime.substring(6,8),10);//2016-05-17 18:51:33 var beginYear parseInt(beginTime.substring(1,5),10); var beginDate parseInt(b…

python——成語接龍小游戲

小試牛刀的簡易成語接龍。 思路—— 1、網上下載成語字典的txt版本 2、通過python進行處理得到格式化的成語&#xff0c;并整理成字典&#xff08;python字典查找速度快&#xff09; 3、python程序&#xff0c;查找 用戶輸入的最后一個字和字典里首字一致的&#xff0c;放入列表…

計劃B? 那是計劃N…沒什么。 拼圖于2015年問世

真是一天 當典型的歐洲人逐漸破產時&#xff0c;美國的人們開始喝咖啡。 這就是為什么我在Mark Reinhold最近的新聞中睡個好覺的原因。 他在題為“ Project Jigsaw&#xff1a;火車晚點 ”的帖子中建議將Project Jigsaw推遲到下一個版本Java 9。 在最近的會議和博客文章上&…

C# 訪問MongoDB 通用方法類

using MongoDB.Driver; using System; namespace MongoDBDemo { public class MongoDb { public MongoDb(string host,string timeOut) { this.CONNECT_TIME_OUT timeOut; this.MONGO_CONN_HOST host; } /// <summary> /// 數據庫所在主機 /// </sum…

html網頁背景圖片平鋪代碼,jQuery圖片平鋪效果制作網頁背景圖片平鋪代碼

插件描述&#xff1a;jQuery圖片平鋪效果制作網頁背景圖片平鋪代碼調用JS文件調用插件方法$(function(){// 插件初始化$(img).jqthumb({classname : jqthumb, // 類名. 默認是 jqthumbwidth : 100%, // 新的圖像裁剪后寬度. 默認是 100px.height : 100%, // 新的圖像裁剪后高度…

使用保險絲結構管理MQ和ESB的大型部署,第I部分

FuseSource最近發布了ActiveMQ和ServiceMix發行版的企業版。 其中一些重要功能包括增量修補 &#xff0c; 自定義平臺安裝程序和第三方驗證 。 新企業版附帶的最酷的功能之一是Fuse Fabric和一些新工具 &#xff0c;使您可以利用Fabric管理環境。 Fabric允許您通過一些命令行或…

Mybatis參數傳遞及返回類型

mybatis參數傳遞&#xff1a; 單個參數&#xff1a;不做特殊處理 #{參數名}&#xff1a;取出參數值 多個參數&#xff1a;做特殊處理 多個參數會被封裝成一個map key&#xff1a;param1 ... paramN value&#xff1a;傳入的參數…

網絡html代碼是什么問題,html代碼問題

html代碼問題來源:互聯網 2010-03-22 10:35:57 評論分類: 電腦/網絡 >> 程序設計 >> 其他編程語言問題描述:這三種鏈接格式我都試了&#xff0c;都不行&#xff0c;請高手指點下。。。。。注意&#xff1a;我要的是代碼&#xff0c;不是操作方法&#xff0c;因為…

spring mvc 文件上傳

spring mvc 文件上傳 一、單文件上傳 配置步驟&#xff1a; 步驟一、在配置文件中配置包掃描器&#xff08;暫且這樣配&#xff0c;會出問題&#xff0c;我們下面說解決方案&#xff09; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns…

使用工廠模式解決設計問題

工廠設計模式是面向對象環境中最常用的模式之一。 再次來自“創意設計”模式類別&#xff0c;即有關對象創建的所有信息。 在某些情況下&#xff0c;對象的創建很復雜&#xff0c;可能需要某種程度的抽象&#xff0c;以便客戶端代碼無法意識到這些復雜性和內部實現細節。 在某些…

103. Binary Tree Zigzag Level Order Traversal

二刷。 BFS&#xff0c;基本習慣上用Iterative的做法來做&#xff0c;就是QUEUE。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ public class Solution…

java多線程系列13 設計模式 Future 模式

Future 模式 類似于ajax請求 頁面異步的進行后臺請求 用戶無需等待請求的結果 就可以繼續瀏覽或者操作 核心就是&#xff1a;去除了主函數的等待時間&#xff0c;并使得原本需要等待的時間段可以用于處理其他業務邏輯 JDK內置實現Future模式演示一下 public class RealData im…

lodop轉到其他html頁面,Lodop實現打印功能

思路&#xff1a;1、在 html 頁面引入 LodopFuncs.js 文件&#xff0c;并用 object 標簽和 embed 標簽獲取 lodop 對象2、在 js 中獲取 html 頁面中的 object 和 embed 對象&#xff0c;并使用getLodop() 方法得到 lodop 對象3、實現打印功能&#xff0c;以下三步是必需的初始化…

完整的Web應用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

Primefaces AutoComplete&#xff0c;JSF轉換器 這篇文章從第一部分和第二部分繼續。 JSF擁有Converter工具&#xff0c;可以幫助我們從用戶視圖中獲取一些數據并將其轉換為從數據庫或緩存中加載的對象。 在“ com.converter”包中&#xff0c;創建以下類&#xff1a; packa…

html5首屏加載樂山暴雨,發布前端項目時因chunk-vendors過大導致首屏加載太慢,Vue Build時chunk-vendors的優化方案...

這個優化是兩方面的&#xff0c;前端將文件打包成.gz文件&#xff0c;然后通過nginx的配置&#xff0c;讓瀏覽器直接解析.gz文件。1、compression-webpack-plugin插件打包.gz文件安裝插件npm install --save-dev compression-webpack-plugin或者yarn add compression-webpack-p…

width:100vh與min-height:calc(100vh + 51px)

vh:相對于視窗的高度&#xff0c;那么vw:則是相對于視窗的高度。 “視區”所指為瀏覽器內部的可視區域大小&#xff0c;即window.innerWidth/window.innerHeight大小&#xff0c;不包含任務欄標題欄以及底部工具欄的瀏覽器區域大小。 詳細vh的用法&#xff0c;大家可以參考http…

XML配置文件中的Spring配置文件

我的上一個博客非常簡單&#xff0c;因為它涵蓋了我從Spring 3.0.x到Spring 3.1.x的輕松升級&#xff0c;最后我提到可以將Spring模式升級到3.1&#xff0c;以利用Spring的最新功能。 在今天的博客中&#xff0c;我將介紹這些功能中最酷的功能之一&#xff1a;Spring配置文件。…

交大計算機專業怎樣,計算機專業高校實力排名,上海交大第五,清華第二,第一毫無爭議...

原標題&#xff1a;計算機專業高校實力排名&#xff0c;上海交大第五&#xff0c;清華第二&#xff0c;第一毫無爭議計算機專業在近幾年可謂是“大熱”&#xff0c;眾多考生搶破頭也想當碼農&#xff0c;背后的原因其實不難理解。互聯網時代的到來&#xff0c;計算機早已滲透到…

python_day7 綁定方法與非綁定方法

在類中定義函數如果 不加裝飾器 則默認 為對象作為綁定方法 如果增加 classmethod 是 以 類 作為綁定方法 增加 classmethod 是 非綁定方法&#xff0c;就是不將函數 綁定 ##################### class Foo: def func(self): print(self) classmethod def func…

Spring Security使用Hibernate實現自定義UserDetails

大多數時候&#xff0c;我們將需要在Web應用程序中配置自己的安全訪問角色。 這在Spring Security中很容易實現。 在本文中&#xff0c;我們將看到最簡單的方法。 首先&#xff0c;我們將在數據庫中需要以下表格&#xff1a; CREATE TABLE IF NOT EXISTS mydb.security_role (…