2012-10-16 62 views
2

我有一個junit測試類。測試類讀取一個文件並向telnet服務器發送一條消息。根據消息的no號,處理可能需要1個小時到5個小時文件。我希望此測試類在屬性文件中配置一定時間後停止。下面是我的代碼。Junit想要在一定的時間後停止方法

public void sendMessage() throws InterruptedException { 
     final long timetorun = Long.valueOf(props.getMap().get("timetorun")) 
       .longValue(); 

     try { 

      System.out.println("duration : " + duration); 
      while (duration < timetorun) { 
       endTime = System.currentTimeMillis(); 
       duration = endTime - startTime; 
       logger.info("Sending Message"); 
       telnetUtils.run(telnetClient); 
       // sendMessage(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

假設timetorun是1小時 這裏的問題是,如果telnetUtils.run(telnetClient);需要超過1小時,這種邏輯將無法工作。

任何人都可以提供一些幫助,如何實現這一點。

回答

3

您可以在測試用例上設置超時。例如:

import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 


public class TestTimeout { 
    private long startAt; 
    @Before 
    public void before() { 
     this.startAt = System.currentTimeMillis(); 
    } 
    @After 
    public void after() { 
     System.out.println(String.format("Total time: %1$d ms", System.currentTimeMillis() - startAt)); 
    } 
    @Test(timeout=1000) 
    public void timeout() throws InterruptedException { 
     Thread.sleep(2000); 
    } 
} 

測試因超時而失敗。它將其寫入標準輸出:

Total time: 1001 ms 
+2

+1您可以將1000更改爲最終值。更好的解決方案是使用超時規則,因爲那樣你可以使用非最終值。 –

+0

事實上,超時規則好得多。我們每天都會學到一些東西:)。 @hanmayya,看看[這個](http://kentbeck.github.com/junit/javadoc/4.10/org/junit/rules/Timeout.html) – Alban