当前位置: 首页 > 面试题库 >

JUnit终止子线程

翁良弼
2023-03-14
问题内容

当我测试创建子线程的方法的执行时,JUnit测试会在子线程之前终止并杀死它。

我如何强制JUnit等待子线程完成其执行?

谢谢


问题答案:

阅读问题和评论后,似乎您需要的是 一种对异步操作进行单元测试的技术
。doSomething()立即返回,但是您希望测试代码等待其完成,然后进行一些验证。

问题在于该测试无法识别该调用所产生的线程,因此显然它无法等待它们。人们可以想到许多复杂的(可能还有缺陷的)方法来解决此问题,但我认为这里存在一个设计问题。单元测试应该模拟某个API的客户端,并且不应假设其实现。它应该仅测试功能,如API及其文档所示。因此,我将避免尝试检测和跟踪由asynch调用创建的线程。相反,如果需要,我将改进测试类的API。异步调用所属的类应提供某种机制来检测终止。我可以想到3种方法,但可能还有更多方法:

1)允许注册一个在操作完成后得到通知的侦听器

2)提供操作的同步版本。该实现可以调用异步版本,然后阻塞直到完成。如果该类不应该公开这种方法,则可以将其可见性降低到受包保护的位置,以便测试可以访问它。

3)在某些可见对象上使用等待通知模式。

如果该类没有提供这种机制,则它实际上不是可测试的,更糟糕​​的是,它也可能不是非常可重用的。



 类似资料:
  • 请帮助我处理这个主线程/父线程将触发子线程。如果我们停止父线程/主线程,它还必须停止所有子线程/子线程 我想用中断做这件事,但做不到。请帮我把代码弄出来 以及如何确保所有子线程都已停止?有什么办法也可以做到这一点吗 提前谢谢! 我正在尝试这样做: 公共类ThreadTest1扩展Thread{私有静态最终记录器LOGGER=Logger.get记录器(mylogger); }

  • 我正在尝试终止子线程,它正在等待来自服务器的输入。我尝试使用该标志进行操作,但它在上停止,因为它等待来自服务器的输入,并且只有在此输入之后才检查该标志并中断。但这不是一个好的解决方案,因为我无法阻止它没有服务器消息。我还尝试先检查标志,然后再检查readline(),但它也不起作用。有什么好的解决办法吗?

  • 主要内容:1 什么是Java终止线程,2 Thread类终止线程的方法,3 Java终止线程的例子1,4 Java终止线程的例子2,5 Java终止线程的例子3,6 isInterrupted和interrupted方法1 什么是Java终止线程 如果任何线程处于睡眠或等待状态(即,调用sleep()或wait()方法),则在线程上调用interrupt()方法,会抛出InterruptedException中断睡眠或等待状态。如果线程未处于睡眠或等待状态,则调用interrupt()方法将执行

  • 问题内容: 以下守护进程正在运行: 它是守护程序,因此如果单例将终止。 因此,以下非守护程序Bean正在等待他: Bean的Spring配置为: 问题是:如果从main运行,为什么它起作用,而从jUnit测试运行,为什么不起作用? 运行代码是 要么 在主要情况下,我会看到所有的声音。在jUnit的情况下,我仅看到心跳0,然后显示消息“等待启动”,并且程序终止,好像没有人在这里等待非守护程序线程一样

  • 问题内容: 如何使多线程python程序响应Ctrl + C键事件? 编辑: 代码是这样的: 我试图在所有线程上删除join(),但仍然无法正常工作。是否因为每个线程的run()过程中的锁段? 编辑: 上面的代码应该可以工作,但是当当前变量在5,000-6,000范围内并遍历以下错误时,它总是会中断 问题答案: 在启动主线程之前,将除主线程之外的每个线程都设为守护进程(在2.6或更高版本中,在2.