【发布时间】:2017-09-28 10:59:47
【问题描述】:
在编写不佳的遗留代码库中,单元测试调用的代码会启动永不停止的线程。在大多数情况下,它没有效果,但在某些情况下,它会大大减慢构建速度,在其他情况下,它会导致构建期间同一项目中的测试之间完全不清楚的副作用:例如测试 A 启动线程,然后 B 在同一个 JVM 中运行并以某种未定义的方式中断(修复是让 A 停止该线程)。
是否有一些工具可以与 junit 结合使用,以便在每个测试(或一个类中的一组测试)结束时,如果有任何线程仍在运行,它会导致测试失败?
这将使我们能够快速识别和修复所有现有案例,但也可以防止以这种方式编写新测试。
【问题讨论】:
-
如果您要的是现有工具,那是离题的边缘。但是实现一个可以作为测试后套件检查运行的检查是微不足道的。
-
不要认为有工具,但您可以使用
java.lang.Thread.activeCount()轻松自己完成,并在每次测试调用前后使用AspectJ进行检查。这也可能是题外话,但绝对不是重复的@StephenC 你在滥用你的权力。 -
其他人可以做到这一点:-)
-
@Alexandros - 我不会使用 AspectJ。我会在 Junit4
@After或@AfterClass钩子或类似的东西中进行检查。
标签: multithreading unit-testing junit4 maven-surefire-plugin