网站建设管理规定,门户网站建设调查问卷,山东省建设厅的网站,资讯类网站建设方案书编写Mockito参考卡后#xff0c;我有机会仔细研究了Mockito不太流行但非常有用的功能。 其中一些过于先进或太稀少#xff0c;无法在refcard中进行描述#xff0c;因此应简短说明。 其中之一就是SmartNull。 当前#xff0c;非空方法返回适用于已知类型#xff08;例如我有机会仔细研究了Mockito不太流行但非常有用的功能。 其中一些过于先进或太稀少无法在refcard中进行描述因此应简短说明。 其中之一就是SmartNull。 当前非空方法返回适用于已知类型例如0false空集合的“安全空值”或者在其他情况下返回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 AnswerObject 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