Thread 类 PowerMockito 模拟 Thread.sleep 抛出中断异常的场景
Posted 2一念轮回2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thread 类 PowerMockito 模拟 Thread.sleep 抛出中断异常的场景相关的知识,希望对你有一定的参考价值。
想要在单元测试时,模拟Thread.sleep()时抛出中断异常的行为,但是仅使用PowerMockito.mockStatic(Thread.class)是不够的,上代码:
要测试的方法getResult:
public class Weekend public void getResult() throws InterruptedException try Thread.sleep(2000); catch(InterruptedException e) throw e;
@RunWith(PowerMockRunner.class)// 此处为实际执行 Thread.sleep()的类 Weekend.class,而不是 Thread.class @PrepareForTest(Weekend.class) public class WeekendTest @InjectMocks private Weekend weekend; @Test(expected = InterruptedException.class)
public void testGetResult() throws InterruptedException
PowerMockito.mockStatic(Thread.class);
PowerMockito.doThrow(new InterruptedException()).when(Thread.class);
Thread.sleep(anyLong());
weekend.getResult();
需要注意的是,通常我们mock静态方法时,是在@PrepareForTest注解中,加上对应类名,如
@PrepareForTest(Utils.class) public class Test public void testFunction() PowerMockito.mockStatic(Utils.class); PowerMockito.when(Utils.function()).thenReturn(expectedResult);
但是对于Thread.sleep方法,在@PrepareForTest中加入Thread.class是无效的,必须加入实际调用Thread.sleep()方法的类,本例中为Weekend.class. 如果没有在@PrepareForTest中加入实际调用类,则无法抛出异常。
原文地址: https://blog.csdn.net/weixin_39576127/article/details/111110777
以上是关于Thread 类 PowerMockito 模拟 Thread.sleep 抛出中断异常的场景的主要内容,如果未能解决你的问题,请参考以下文章
如何使用powermockito,模拟一个类中的私有静态属性,而且这个属性是了工
PowerMockito 在 Spring Boot 中模拟私有方法