最近在给遗留代码写单元测试,有点披荆斩棘的感觉,目前发现被测代码有很多让人“惊喜”的地方,最大的特点就是一言不合就要访问数据库,比如:
构造函数里面要访问数据库
Set方法里面要访问数据库
常量定义也要访问数据库
静态方法里也要访问数据库
导致的问题是如果我只想静静地测试业务逻辑层的代码必须要依赖数据库。测试一旦访问数据库,最大的问题就是慢,你可能要等上几十秒才能收到反馈,这是不能接受的(不解释)。
还好有单元测试神器PowerMockito,它结合了Mockito的简洁优雅和PowerMock的灵活强大,专治各种不服,一起来感受一下:
- 最基本的,创建一个mock对象:
OrderDao mock = mock(OrderDao.class);
- Mock对象的方法
when(mock.findById(1)).thenReturn(whatuwant);
- Mock构造函数
whenNew(Order.class). withNoArguments().thenReturn(mock);
- Mock静态方法
mockStatic(Order.summary()). thenReturn(10000);
感觉有了PowerMockito,我再也不怕“惊喜”了。