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 中模拟私有方法

使用PowerMockito 对静态类进行mock

PowerMockito 模拟单个静态方法并返回对象

Mockito / PowerMockito每次在不同实例的循环中模拟静态方法?

使用PowerMockito如何使用一组特定参数验证是否调用了构造函数