java - 如何确定哪个测试挂起?
问题描述
我有一个挂起的测试......当我尝试从 Maven 运行测试时,它总是以 ManagedLedgerTest 结束,如下所示:
[INFO] Running org.apache.bookkeeper.client.PulsarMockReadHandle
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.028 s - in org.apache.bookkeeper.client.PulsarMockReadHandle
[INFO] Running org.apache.zookeeper.MockZooKeeper
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.063 s - in org.apache.zookeeper.MockZooKeeper
[INFO] Tests run: 73, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 23.832 s - in org.apache.bookkeeper.mledger.impl.ManagedLedgerTest
几小时后,日志看起来还是一样。当我在 ManagedLedgerTest 中运行测试时,它们都通过了。所以,在 ManagedLedgerTest 之后似乎有一个测试它正在挂起。当我将代码推送到我们的构建服务器时,我们看到了完全相同的行为。我尝试通过添加参数以增加详细程度从 Maven 运行测试-X
,如下所示:
mvn install -DfailIfNoTests=false '-Dtest=!KafkaProducerSimpleConsumerTest,!PrimitiveSchemaTest,!BlobStoreManagedLedgerOffloaderTest' -pl '!pulsar-broker,!pulsar-proxy,!pulsar-brokeruth-sasl,!pulsar-io/kafka-connect-adaptor,!tests/pulsar-storm-test' -X
但是,我没有收到有关挂起的任何其他信息。(上面的输出与-X
提供时相同。)
如何确定哪个测试挂起?
解决方案
- 方式:通过远程调试开始测试,查看surefire-documentation,如何做到这一点。
当测试挂起时,附加一个调试器(intellij、netbeans、eclipse,...)并查看堆栈跟踪。
- 方式:创建运行测试的 java-vm 的 stackdump(使用 jstack)。这些堆栈之一应该显示您的悬挂测试。
推荐阅读
- sql-server - MS SQL Server:将表转换为 SCD 的最佳方法
- r - 如何在具有层次聚类的 tsclust 中使用 DBA 质心
- flutter - 如何获取最近的照片?
- javascript - Javascript:在可编辑的内容中获取文本,直到插入符号
- flutter - 在 ListTile 中省略前导
- javascript - 如何从数组数组中创建一个包含所有值的数组
- java - 线程运行一个我无法控制的无限操作。如何阻止它?
- javascript - 在 fetch 请求上发送 cookie 和 API Key
- javascript - Firebase 规则仅访问自己的数据、公共数据或特定数据
- c - GCC(主干)-fanalyzer [CWE-401] 误报?