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”)))

 可参考:PowerMockito单元测试(1)-主要思想以及常规异常覆盖

 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一起非常好用!!!

  • 13
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PowerMockito是一个用于增强单元测试的框架,它可以模拟和修改静态方法、私有方法、构造函数等。在使用PowerMockito进行单元测试时,可以按照以下步骤进行操作: 1. 首先,在测试类上添加@RunWith(PowerMockRunner.class)注解,以告诉JUnit使用PowerMockRunner来运行测试。 2. 使用@PrepareForTest注解指定需要被模拟的类,例如@PrepareForTest({StaticTest.class})。 3. 使用PowerMockito.mockStatic方法来模拟静态方法,例如PowerMockito.mockStatic(StaticTest.class)。 4. 使用PowerMockito.when方法来设置模拟方法的返回值,例如PowerMockito.when(StaticTest.static1()).thenReturn("static")。 5. 如果需要模拟静态方法的行为,可以使用PowerMockito.doNothing().when(StaticTest.class, "static1", file, null)。 6. 最后,调用被测试的静态方法,并将结果保存在一个变量中,例如String result = StaticTest.static1()。 通过以上步骤,你可以使用PowerMockito对静态方法进行单元测试。这样可以模拟和修改静态方法的行为,以便更好地进行测试。\[1\] #### 引用[.reference_title] - *1* [单元测试 Mockito PowerMockito](https://blog.csdn.net/miracle_8/article/details/97029676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值