2013-01-17 65 views
0

嗨,我試圖爲此編寫Junit測試用例,因爲我不能在這裏返回任何東西來捕捉和測試assertrue(....)在我的測試用例中。 SendMailTLS是一個獨立的班組長(無主),這將郵件發送到電子郵件ID從mysql.Updates獲取是一個單獨的類,它得到的網站,並將它們存儲一些值到mysql.If我寫正常通過調用run方法沒有任何asserttrue /即使我評論Thread.sleep(1000 * 60 * 1);,assertequals程序仍會繼續運行。在這種情況下,我會如何測試這個?任何建議,將不勝感激。Junit4線程的測試用例

public class Scheduler implements Runnable { 

    public void run() { 
     while(true) 
     { 
      SendMailTLS mail= new SendMailTLS(); 
      Updates Employee= new Updates(); 

      try { 
       mail.Mail(); 
       Employee.update();    
       Thread.sleep(1000 * 60 * 1); 
      } 
      catch{ 
      //catch code here 

      } 

      System.out.println("Scheduler Task Complete"); 
     } 
    } 

    public static void main(String args[]) { 
      (new Thread(new Scheduler())).start(); 
     } 
} 

回答

1

一個你可以測試的事情是,如果該方法運行後DB通過類更新保存的內容是否正確。我認爲這將是很難測試,如果電子郵件發送。我最近有類似的情況,但電子郵件發送類保存數據庫中的電子郵件的內容,所以我做的是檢查郵件數據是否正確保存在數據庫中。您的SendMailTLS是否留下任何有關其工作的信息?如果是這樣,你可以嘗試測試。 您的方法無限期運行並非必要的事實需要成爲問題。在測試中準備一些數據(在我假設的數據庫中),在測試中等待一段時間,然後檢查系統狀態(例如數據庫中的數據)是否正確。在JUnit線程完成後,應該單獨的線程(我認爲如果JUnit線程不再運行,其他線程會被終止)。

+0

感謝烏拉圭回合的建議,我推斷你的意思是說,檢查類郵件和更新分別確定我期待將運行所有電子郵件+更新+ thread.For電子郵件沒有問題後,我SendMailTLS類不返回任何一個單一的測試案例送我打算創建一個臨時變量,並將其設置爲1,並檢查該變量是在測試case.I 1或不我打算同爲更新這裏class.And我只想代碼覆蓋率爲最大:d。我的大多數功能都很好。 – HkFreaKuser1673718