Mockito 向private final 赋值
2015-12-19 10:43
375 查看
一、
在添加unit test的时候,遇到了一个NPE(NullPoint Excepotion)的异常。
在exception的track发现,是由于private final logger私有域未赋值的情况,以下是解决方案。
通过使用反射机制进行赋值,采用MIT的Mockito的第三方工具进行初始化[有关Mockito的更多用法,稍后讲解]。代码如下
二、
当类中的Field不是private static final而是private final时,上述方法将抛出NPE,具体异常可见于field.set方法。
如:private final IDataService ds = ServiceLocatorFactory.getLocator().getDataService();
此时可用powermockito的mockstatic进行复制
在添加unit test的时候,遇到了一个NPE(NullPoint Excepotion)的异常。
在exception的track发现,是由于private final logger私有域未赋值的情况,以下是解决方案。
通过使用反射机制进行赋值,采用MIT的Mockito的第三方工具进行初始化[有关Mockito的更多用法,稍后讲解]。代码如下
private void setFinalStatic(Field field, Object newValue) throws Exception { field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, newValue); }
二、
当类中的Field不是private static final而是private final时,上述方法将抛出NPE,具体异常可见于field.set方法。
如:private final IDataService ds = ServiceLocatorFactory.getLocator().getDataService();
此时可用powermockito的mockstatic进行复制
PowerMockito.mockStatic(ServiceLocatorFactory.class); ServiceLocator sl = mock(ServiceLocator.class); when(ServiceLocatorFactory.getLocator()).thenReturn(sl); IDataService ds = mock(IDataService.class); when(sl.getDataService()).thenReturn(ds); ObservationQuery oq = mock(ObservationQuery.class); when(ds.createObservationQuery()).thenReturn(oq);
相关文章推荐
- Ruby单元测试框架TestUnit的替代者MiniTest介绍
- Android学习笔记之应用单元测试实例分析
- 我的Node.js学习之路(四)--单元测试
- Android编程单元测试实例详解(附源码)
- Android编程之单元测试实例分析
- mstest实现类似单元测试nunit中assert.throws功能
- java编程之单元测试(Junit)实例分析(附实例源码)
- python单元测试unittest实例详解
- angularjs中的单元测试实例
- Python中unittest模块做UT(单元测试)使用实例
- Android单元测试 笔记
- 在 Ruby on Rails 中进行单元测试
- 单元测试工具Numega
- 用cpp做c++单元测试
- JUnit4概述
- 单元测试详解
- 单元测试准则
- 单元测试、集成测试和系统测试的不同之处
- linux下netbeans的安装及cppunit的配置
- 单元测试本质:面向逻辑块