首页 > 其他分享 >Thread 类 PowerMockito 模拟 Thread.sleep 抛出中断异常的场景

Thread 类 PowerMockito 模拟 Thread.sleep 抛出中断异常的场景

时间:2023-03-27 12:01:54浏览次数:37  
标签:PowerMockito Thread public sleep Weekend class

 

想要在单元测试时,模拟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

 

标签:PowerMockito,Thread,public,sleep,Weekend,class
From: https://www.cnblogs.com/lbzwd/p/17261083.html

相关文章

  • python-threading
    python-threading目录python-threadingthreadingThread创建线程Thread方法属性守护线程线程锁Lockthreading.Lockthreading.RLock事件对象EventConditionTimerimportthr......
  • Qt源码阅读(二) moveToThread
    Qt源码分析之moveToThread这一次,我们来看Qt中关于将一个QObject对象移动至一个线程的函数moveToThread目录Qt源码分析之moveToThreadQt使用线程的基本方法源码分析一些......
  • Java ThreadLocal
    ThreadLocal的功能在Java多线程并发环境中非常实用,其作用是提供线程本地变量,例如用户ID、会话ID等与当前线程密切关联的信息。那么它在实际业务场景中可以怎么使用呢?让我们......
  • linux部署tomcat,tomcat无法启动一直卡在starting ZkClient event thread的解决办法
    近期迁移服务到新的服务器,启动tomcat后,去网页访问时,发现无法访问,只能去看tomcat日志,发现日志里面一直卡在startingZkClienteventthread然后又去ps-ef|greptomcat......
  • RT-Thread BSP qemu-virt64-aarch64 挂载 ext4文件系统
    前言经常简单的配置,在RT-ThreadBSPqemu-virt64-aarch64上可以支持fat文件系统,但是如何支持ext4文件系统呢?经过验证,也是配置使能ext4就可以支持ext4软件包当前RT......
  • RT-Thread BSP qemu-virt64-aarch64 文件系统
    前言前面大体上搭建了RT-ThreadBSPqemu-virt64-aarch64的交叉编译环境,运行后发现,文件系统没有挂载上,感觉是没有mkfs。通过RT-Thread官方的文档,找到了解决方法创建独立......
  • 2 -进程-Windows 10 -Python - multiprocessing 两种方法实现多进程 - 进程池 _ 简单P
    @目录一、进程池进程池map()和imap()方法的实现进程池apply_async()的实现二、简单Process方法三、守护进程堵塞join理解四、进程的sleep()线程睡眠理解测试......
  • CreateThread——类内线程回调函数
    CreateThread的函数声明如下:点击查看代码HANDLEWINAPICreateThread(_In_opt_LPSECURITY_ATTRIBUTESlpThreadAttributes,_In_SIZE_TdwStackSize,_I......
  • 什么时候用ExecutorService,什么时候用ThreadPoolExecutor?
    如果不需要对线程池参数应用任何自定义微调,并且希望使用预配置的线程池实例,则应该选择ExecutorService。ExecutorService提供了几种方法来创建不同类型的线程池,例如固定的......
  • qt 多线程 moveToThread 的一个骚操作
    moveToThread 相当于是一个多线程的阻塞函数,本案例可多次点击按钮,多次触发,这个信号触发类似于内部建立一个队列,处理函数会按照顺序处理信号 test_moveToThread.p......