On est parfois tenté de tester des choses que l'on ne teste pas habituellement en utilisant les tests unitaires. Cela vient essentiellement d'un malentendu et du désir de tout tester. Et puis vous réalisez que vous ne savez pas comment le tester avec les tests unitaires.
Vous feriez mieux de vous demander : qu'est-ce que je teste ici ?
Dois-je tester que les données ne sont pas disponibles tant que la demande n'est pas terminée ?
Vous pouvez alors écrire une version non-asynchrone du test qui vérifiera que les données sont disponibles après la fin de la requête.
Dois-je tester que la réponse a été enregistrée correctement après la demande ?
Vous pouvez également le tester en utilisant des drapeaux dans votre logique.
Vous pouvez effectuer tous les tests logiques sans exécuter de tests asynchrones.
Donc, au fond, je vous demanderais même pourquoi vous pensez avoir besoin de tester l'appel asynchrone ?
Les tests unitaires sont censés s'exécuter rapidement - considérez donc cela comme une raison supplémentaire de ne pas tester les appels asynchrones. Imaginez un système d'intégration continue qui exécute ces tests - il aura besoin de plus de temps.
En lisant vos commentaires sur une autre réponse, je pense qu'il n'est pas du tout courant d'utiliser l'asynchronisme dans les tests. Par exemple, Kent Beck dans son livre TDD mentionne que les tests unitaires simultanés sont possibles mais très rares.
Alors - qu'est-ce que vous voulez vraiment tester et pourquoi ?