如何在使用 JUnit 测试的多线程应用程序中调试断点?

How to debug breakpoints in multithreaded applications tested with JUnit?

使用 JUnit5 测试多线程应用程序,自动化测试 运行 就好了。 但是在手动调试的时候,环境运行不正常,我想知道如何让它正常运行。


IntelliJ(使用 Java VM + 它的调试器)有两个在断点处挂起的常规选项:“All”=所有线程,或“Thread”=仅当前线程。

(哪个线程是“当前线程”可能不清楚并导致问题,但这已单独讨论,请参阅 Whosebug 上的其他问题。)

通缉行为:

实际行为:

如何实现通缉行为?


(环境:Java 9 模式中的 AdoptOpenJDK8、AdoptOpenJDK11、IntelliJ 2020.3、JUnit-Jupiter 5.7.0)

您可以使用两个断点。您真正感兴趣的一个和单元测试中的另一个(介于调用被测代码和清理之间的某个地方)。将两者都设置为仅挂起当前线程。