我想在java程序中运行jUnit测试用例,并在超时后停止运行。要执行测试,我使用JUnitCore的run(Request)方法。
测试类包含花费大量时间和/或不终止的方法。因此,我希望能够停止执行。
但是,jUnit的pleaseStop标志仅在完成测试用例后才被考虑,方法不能被中断,并且内容(例如,可以关闭的已使用的IO资源)是未知的。此外,我想避免使用一个过程。
还有其他方法可以阻止执行单个测试用例吗?
在我不在线程之间共享任何资源的条件下使用Thread.suspend()是否可以?
(我读过 Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?)
答案 0 :(得分:2)
在我不在线程之间共享任何资源的条件下使用Thread.suspend()是否可以?
我会说,对于 tests ,使用已弃用的Thread.suspend()
方法应该没问题。我认为重申它被弃用的原因很重要。您可以在持有锁时暂停线程,这可能会极大地改变代码的运行方式,甚至导致死锁。
如果可能的话,我会考虑使用其他机制来实现相同的行为。
引用javadocs:
已过时。此方法已被弃用,因为它本身就容易出现死锁。如果目标线程在监视器上保持锁定,在挂起时保护关键系统资源,则在恢复目标线程之前,任何线程都无法访问此资源。如果恢复目标线程的线程在调用resume之前尝试锁定此监视器,则会导致死锁。这种死锁通常表现为“冻结”过程。有关更多信息,请参阅为什么Thread.stop,Thread.suspend和Thread.resume已弃用?。
答案 1 :(得分:1)
您可以对单个测试使用timeout参数,也可以对类中的所有测试使用Timeout规则。请参阅此处的文档Timeout-for-tests。