2012-11-17 99 views
0

我使用的是EJB的時間表做電子郵件守護任務的EJB @Schedule:如何測試

@Schedule(hour="8, 10, 12, 14, 16, 18") 
    public void sendExpirationReminders() { 
} 

如何測試一個正在運行的服務器上,這些方法是什麼?

我目前在我的大多數測試中使用HtmlUnit,所以我可以做出真正的瀏覽器請求。但是我不知道如何測試這些守護進程方法的內部內容。

回答

2

簡短的回答是:你不能。

有些人建議(我同意)是將執行調度的代碼與實際執行操作的代碼分開。如果你遵循這個,你將有一個具有@Schedule註解的類,其唯一的責任是調用執行該操作的類。

爲什麼你可以測試這個?很容易,你不能在應用程序服務器中模擬日期(或時鐘)。

+0

這並不是太糟糕的方法。我會分析我的軟件,看看這是多麼可信。 –

+0

關於這一點的蹩腳部分是執行@Schedule的EJB也具有許多注入資源,例如MailSender,VelocityEngine等。這真的讓我不得不分開邏輯。 –

+0

您可以使用所有@Scheduled方法創建一個名爲Cron的類,並從該類中調用您已擁有的方法。 – Augusto