当我测试创建子线程的方法的执行时,JUnit测试将在子线程之前终止并杀死它。
如何强制JUnit等待子线程完成其执行?
最佳答案
阅读问题和评论后,似乎您需要的是一种用于对异步操作进行单元测试的技术。 doSomething()立即返回,但是您希望测试代码等待其完成,然后进行一些验证。
问题在于该测试无法识别该调用所产生的线程,因此显然它无法等待它们。人们可以想到许多复杂的(可能还有缺陷的)方法来解决此问题,但我认为这里存在一个设计问题。单元测试应该模拟某个API的客户端,并且不应对实现进行任何假设。它应该仅测试功能,如API及其文档所示。因此,我将避免尝试检测和跟踪由异步调用创建的线程。相反,如果需要,我将改进测试类的API。异步调用所属的类应提供某种机制来检测终止。我可以想到3种方法,但可能还有更多方法:
如果该类没有提供这种机制,则它实际上不是可测试的,更糟糕的是,它也可能不是非常可重用的。