Test @Prévue au printemps
Printemps offre la possibilité de planifier et d'exécuter des tâches à intervalles réguliers à l'aide d'annotations, par exemple @Prévue
Est-il un moyen pratique pour l'unité de tester ce comportement?
Bien sûr que je pourrais appeler la méthode de la fève de moi, mais je veux m'assurer de ne pas courir dans des problèmes comme plusieurs exécutions en raison d'une mauvaise configuration et ainsi de suite.
D'autres cadres, d'offrir la possibilité pour l'avance le temps que vous-même. Un exemple est Or où vous pouvez appeler
org.activiti.engine.impl.util.ClockUtil.setCurrentTime(date)
pour avancer le temps utilisé par le framework.
Est-il quelque chose de comparable au Printemps?
Essentiellement ce que je veux faire, c'est quelque chose comme cela dans un test unitaire (exécuter à l'aide de SpringJUnit4ClassRunner
)
@Test public void testTaskScheduling() {
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIinitiallyExpect)));
SpringClockUtil.setDate(dateInTwoHours)//This is what I am missing
SpringTaskExecutor.executeAllScheduledTasks() //Also missing
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIexpectNow)));
}
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tester la méthode d'exécution à l'aide de l'ordinaire JUnit, mais pour tester si le
@Scheduled(cron = "0 * * * * *")
que vous avez spécifié est correct, vous pouvez utiliser:Voici le résultat:
Que la dernière exécution (à régler dans les
TriggerContext
) était un vendredi, la prochaine exécution sera le lundi suivant.J'ai été de jongler avec le Printemps de l'api et j'ai trouvé cette solution, j'espère que cela aide quelqu'un comme ça m'a aidé.
Test de la date prévue de code en invoquant le haricot directement.
Puis test de la planification de la configuration par:
1) le déploiement de votre code dans un environnement de test, de le laisser fonctionner pendant un certain temps et l'inspection des journaux et/ou de résultats (en supposant que la date prévue de code ne l'abattage et/ou produit des résultats visibles) par la suite.
ou
2) de l'extériorisation de la planification de la configuration au Printemps de configuration XML à l'aide de la
<task: />
espace de noms et l'injection d'une unité de test spécifique à intervalle/calendrier (de préférence courtes et fréquentes pour être utilisable dans une unité/d'un test d'intégration) à l'aide dePropertyPlaceHolderConfigurer
. Ensuite, dans votre test vérifiez que la date prévue de code (que ce soit moqué ou de la chose réelle) a été invoqué le bon nombre de fois dans le (court) laps de temps.