我必须为一个网站编写测试,这个网站有时在加载页面时会无限期挂起。我想写一个方法,在它开始运行20分钟后超时。
但是当我试着写这样的代码时-
@Test(timeOut=4000)
public void test() {
try { Thread.sleep(5000); } catch (InterruptedException e) {}
System.out.println("I don't want this to print.");
}
测试打印出“我不想打印这个”然后以预期的异常失败- org.testng.internal.thread.ThreadTimeoutException: Method didn't finish within the time-out 4000
我怎样才能让考试一到期限就不及格呢?
1条答案
按热度按时间toe950271#
tldr公司;
不要接住
InterruptedException
把它放进去。当testng工作时(在本例中),框架将创建一个新的单线程executorservice,提交一个等待终止的worker。如果测试运行未完成,工人将抛出
org.testng.internal.thread.ThreadTimeoutException
. 相关源代码是:org.testng.internal.methodinvocationhelper方法调用
关键是:
这个
java.util.concurrent.ExecutorService.awaitTermination(...)
方法抛出InterruptedException
在试验方法中进行了处理。因此,测试方法不会终止,但finished
标志将为假。因此,这将有助于: