0

我想在 java 程序中运行 jUnit 测试用例并在超时后停止运行。为了执行测试,我使用 JUnitCore 的 run(Request) 方法。

测试类包含需要大量时间和/或不会终止的方法。因此,我希望能够停止执行。

但是,jUnit 的 pleaseStop 标志只在测试用例完成后才考虑,方法不能被中断并且内容(例如可以关闭的已用 IO 资源)是未知的。此外,我想避免使用流程。

有没有其他方法可以停止单个测试用例的执行?

在我不在线程之间共享任何资源的情况下使用 Thread.suspend() 可以吗?

(我已经阅读了 为什么不推荐使用 Thread.stop、Thread.suspend 和 Thread.resume?

4

2 回答 2

2

在我不在线程之间共享任何资源的情况下使用 Thread.suspend() 可以吗?

我会说,对于测试,使用不推荐使用的Thread.suspend()方法应该没问题。我认为重申它被弃用的原因很重要。您可以在线程持有锁时暂停线程,这可能会极大地改变您的代码操作方式,甚至导致死锁。

如果可能的话,我会考虑使用其他机制来实现相同的行为。

引用 javadocs:

已弃用。此方法已被弃用,因为它本质上容易死锁。如果目标线程在暂停时对保护关键系统资源的监视器持有锁,则在目标线程恢复之前没有线程可以访问该资源。如果将恢复目标线程的线程在调用 resume 之前尝试锁定此监视器,则会导致死锁。这种死锁通常表现为“冻结”进程。有关详细信息,请参阅为什么不推荐使用 Thread.stop、Thread.suspend 和 Thread.resume?。

于 2013-04-16T15:50:26.313 回答
1

您可以在单个测试上使用 timeout 参数,或者在一个类中的所有测试上使用 Timeout 规则。请参阅此处的文档Timeout-for-tests

于 2013-04-15T20:54:37.447 回答