Как протестировать EJB @Schedule

Я использую расписание EJB для выполнения задачи демона электронной почты:

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

Как я могу протестировать эти методы на работающем сервере?

В настоящее время я использую HtmlUnit для большинства своих тестов, поэтому я могу делать настоящие запросы браузера. Но я не знаю, как проверить внутреннее содержимое этих методов демона.


person Nicholas DiPiazza    schedule 17.11.2012    source источник


Ответы (1)


Короткий ответ: вы не можете.

Некоторые люди предлагают (с чем я согласен) отделить код, выполняющий планирование, от кода, фактически выполняющего операцию. Если вы последуете этому, у вас будет один класс с аннотацией @Schedule, единственной обязанностью которого является вызов класса, выполняющего операцию.

Почему вы можете проверить это? Это просто, вы не можете издеваться над датой (или часами) на сервере приложений.

person Augusto    schedule 17.11.2012
comment
Это не так уж и плохо. Я проанализирую свое программное обеспечение и посмотрю, насколько это правдоподобно. - person Nicholas DiPiazza; 17.11.2012
comment
Дрянная часть этого заключается в том, что EJB, выполняющий @Schedule, также имеет множество внедренных ресурсов, таких как MailSender, VelocityEngine и т.д. Мне действительно нужно отделить логику. - person Nicholas DiPiazza; 17.11.2012
comment
Вы можете создать класс Cron со всеми методами @Scheduled и из этого класса вызвать метод, который у вас уже есть. - person Augusto; 17.11.2012