Est-il possible de vérifier une méthode fictive exécutée dans un thread différent dans Mockito?
J'ai une méthode comme la suivante,
public void generateCSVFile(final Date billingDate) {
asyncTaskExecutor.execute(new Runnable() {
public void run() {
try {
accessService.generateCSVFile(billingDate);
} catch (Exception e) {
LOG.error(e.getMessage());
}
}
});
}
J'ai raillé:
PowerMockito.doNothing().when(accessService).generateCSVFile(billingDate);
Mais quand j'ai vérifier:
verify(rbmPublicViewAccessService, timeout(100).times(1)).generateCSVFile(billingDate);
Il donne comme moi n'est pas invoquée. Est-ce parce qu'il est appelé par l'intermédiaire de thread séparé, et est-il possible de vérifier les méthodes appelées dans le thread différent?
source d'informationauteur kuhajeyan
Vous devez vous connecter pour publier un commentaire.
Il est très probable que la
Runnable
n'a pas encore été exécutés par leasyncTaskExecutor
lorsque vous vérifiez l'invocation, résultant en une erreur de vérification de votre unité de test.La meilleure façon de résoudre ce problème est de rejoindre sur le fil et attendre l'exécution avant de vérifier les invocations.
Si vous ne pouvez pas obtenir l'instance de la classe thread, une manière de contourner ce problème est de se moquer de l'
asyncTaskExecutor
et de mettre en œuvre de sorte qu'il va exécuter l'exécutable directement.J'ai eu le même problème et joué un peu avec le délai argument
http://javadoc.io/page/org.mockito/mockito-core/latest/org/mockito/Mockito.html#22
mais avec l'argument 0, comme dans
Et il fonctionne. Je suppose que le test fil des rendements, et donc l'autre thread a la possibilité de faire son travail, en appelant l'on se moque de façon appropriée.
Néanmoins, il sent comme un hack.