2010-10-27 22 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); 

}