如何在使用 JUnit 测试的多线程应用程序中调试断点?
How to debug breakpoints in multithreaded applications tested with JUnit?
使用 JUnit5 测试多线程应用程序,自动化测试 运行 就好了。
但是在手动调试的时候,环境运行不正常,我想知道如何让它正常运行。
IntelliJ(使用 Java VM + 它的调试器)有两个在断点处挂起的常规选项:“All”=所有线程,或“Thread”=仅当前线程。
(哪个线程是“当前线程”可能不清楚并导致问题,但这已单独讨论,请参阅 Whosebug 上的其他问题。)
通缉行为:
- 暂停特定线程的断点,和 JUnit 测试环境,这是 IDE 调试的一部分。
实际行为:
- 要么所有线程都被挂起,即使是那些应该 运行ning
的线程
- 或者只有一个线程被挂起,JUnit @AfterEach/@AfterAll注解杀死当前调试的资源,终止应该运行ning的线程等
如何实现通缉行为?
(环境:Java 9 模式中的 AdoptOpenJDK8、AdoptOpenJDK11、IntelliJ 2020.3、JUnit-Jupiter 5.7.0)
您可以使用两个断点。您真正感兴趣的一个和单元测试中的另一个(介于调用被测代码和清理之间的某个地方)。将两者都设置为仅挂起当前线程。
使用 JUnit5 测试多线程应用程序,自动化测试 运行 就好了。 但是在手动调试的时候,环境运行不正常,我想知道如何让它正常运行。
IntelliJ(使用 Java VM + 它的调试器)有两个在断点处挂起的常规选项:“All”=所有线程,或“Thread”=仅当前线程。
(哪个线程是“当前线程”可能不清楚并导致问题,但这已单独讨论,请参阅 Whosebug 上的其他问题。)
通缉行为:
- 暂停特定线程的断点,和 JUnit 测试环境,这是 IDE 调试的一部分。
实际行为:
- 要么所有线程都被挂起,即使是那些应该 运行ning 的线程
- 或者只有一个线程被挂起,JUnit @AfterEach/@AfterAll注解杀死当前调试的资源,终止应该运行ning的线程等
如何实现通缉行为?
(环境:Java 9 模式中的 AdoptOpenJDK8、AdoptOpenJDK11、IntelliJ 2020.3、JUnit-Jupiter 5.7.0)
您可以使用两个断点。您真正感兴趣的一个和单元测试中的另一个(介于调用被测代码和清理之间的某个地方)。将两者都设置为仅挂起当前线程。