2010-10-27 59 views
4

我有一个JUnit测试用例,我期待特定的方法调用需要很长时间(超过一分钟)。我想要在JUnit测试用例中检查超时

  1. 进行方法调用。
  2. 确保方法调用至少需要一分钟,如果没有JUnit断言失败。
  3. 然后杀掉方法调用(假设它需要超过一分钟),因为它可能需要很长时间。

我该怎么做?

回答

9

您可以编写一个实现runnable的类,该类包装感兴趣的方法;假设产卵线程是允许的。

public class CallMethod implements Runnable 
{ 
    //time in milli 
    public long getStartTime() 
    { 
    return startTime; 
    } 

    //time in milli 
    public long getEndTime() 
    { 
    return endTime; 
    } 

    public void run() 
    { 
     startTime = ...; 
     obj.longRunningMethod(); 
     endTime = ...; 
    } 
} 

然后在你的JUnit,你可以这样做:

public void testCase1() 
{ 
    CallMethod call = new CallMethod(); 
    Thread t = new Thread(call); 
    t.start(); 
    t.join(60000); // wait one minute 

    assertTrue(t.alive() || call.getEndTime() - call.getStartTime() >= 60000); 

}