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上提供更好的错误消息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓vmware虚拟机(安卓vmware
- 下一篇: 空间如何备案使用(空间如何备案)