PowerMockito单元测试(4)-异常覆盖的方式
4. 异常覆盖的方式:
4-1. 触发异常方法的对象可以mock,在调用的时候触发异常,那么可以使用doThrow来操作
//a.对异常打桩 DataAccessException exception = PowerMockito.mock(DataAccessException.class); //b.模拟try内的方法,doThrow异常 PowerMockito.doThrow(exception).when(userMappers).getUsers(“test”) //c.模拟catch内的方法(如果catch内不涉及别的方法,可以省略) PowerMockito.doNothing().when(systemErrorRecoder).addMsgError(Mockito.anyString()) //d.验证异常后返回的结果 Assert.assertTure(CollectionUtils.isEmpty(userDao.getUsers(“test”)))
可参考:
4-2. 静态方法调用触发的异常:
【要测试的方法】:
public class SysUserUtil{ public static String getSysUser(String userId){ ... ... String sysUserId = null; try{ sysUserId = UserUtil.getSysUser(userId); }catch(DataAccessException e){ systemErrorRecoder.addMsgError(e.getMessage()); } return sysUserId; } }
【方法的单元测试】:-thenThrow
@RunWith(PowerMockRunner.class) // 必要,确保使用PowerMock框架引擎执行单元测试 @PowerMockIgnore("javax.management.*") // 解决报错previously initiated loading for different type with name "javax/managemen @PrepareForTest({ UserUtil.class}) public class SysUserUtilTest{ @Test public void testGetSysUser() throws DataAccessException{ //a.对异常打桩 DataAccessException exception = PowerMockito.mock(DataAccessException.class); //b.mockststic静态类 PowerMockito.mockStatic(UserUtil.class); //c.thenThrow覆盖异常 PowerMockito.when(UserUtil.getSysUser(Mockito.anyString())).thenThrow(exception); // 重点 //d.断言真实对象调用结果 Assert.assertNull(SysUserUtil.getSysUser("test")); } }
【要点】:
需要将静态方法类添加到@PrepareForTest({UserUtil.class}) 需要对静态方法类进行mockStatic 按照上述格式进行thenThrow覆盖
【方法的单元测试】:-stub
@RunWith(PowerMockRunner.class) // 必要,确保使用PowerMock框架引擎执行单元测试 @PowerMockIgnore("javax.management.*") // 解决报错previously initiated loading for different type with name "javax/managemen @PrepareForTest({ UserUtil.class}) public class SysUserUtilTest{ @Test public void testGetSysUser() throws DataAccessException{ //a.对异常打桩 DataAccessException exception = PowerMockito.mock(DataAccessException.class); //b.对方法进行stub | toThrow异常 PowerMockito.stub(PowerMockito.method(UserUtil.class,"getSysUser",String.class)).toThrow(exception);// 重点 //c.断言真实对象调用结果 Assert.assertNull(SysUserUtil.getSysUser("test")); } }
【要点】:
【此处stub语义】:与PowerMockito.method一起使用,抑制方法执行,并返回期望值 第一个参数方法所在的类,第二个参数为方法名,第三个参数为参数类型 需要对stub的类添加到PrepareForTest里 stub与PowerMockito.method一起非常好用!!!
上一篇:
5款热门的远程控制软件,让你事半功倍
下一篇:
如何做好测试用例评审