mockito环境配置_Mockito –使用全局配置的SmartNull在NPE上提供更好的错误消息
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上提供更好的错误消息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos家庭宽带(ddos家用网络)
- 下一篇: 代理模式介绍