2012-11-17 64 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