Les tests de Chameau avec MockEndpoints
J'ai une série de "pipeline" des composants qui communiquent par le biais de ActiveMQ files d'attente de messages. Chaque composant utilise Chameau pour traiter chacune de ces files d'attente comme un point de Terminaison. Chaque composant utilise le même modèle de base:
Où chaque composant consomme les messages d'une file d'attente d'entrée, le message(s), et ensuite les endroits 1+ messages sur un aller/file d'attente de sortie. La "sortie" de la file d'attente devient alors le "input" de la file d'attente pour le prochain volet de la chaîne. Assez basique.
Je suis maintenant en train de se retrousser mes manches et de fournir des tests unitaires pour chaque composant à l'aide de la MockEndpoints
fournis par Chameau de test de l'API. J'ai été coulée sur la javadoc et les quelques exemples à dos de Chameau site internet, mais éprouve des difficultés à se connecter tous les points.
Il me semble que, pour chaque composant, une partie de mon test unitaire est va vouloir accomplir les trois choses suivantes:
- Test pour voir si il y a des messages en attente sur un particulier de "l'entrée" dans la file d'attente
- Tirer de ces messages et de les traiter
- De faire passer des messages à une "sortie" de la file d'attente et de vérifier qu'ils ont fait il y
Je croire j'ai besoin de créer MockEndpoints
pour chaque file d'attente de la sorte:
@EndpointInject(uri = "mock:inputQueue")
protected MockEndpoint intputQueue;
@EndpointInject(uri = "mock:outputQueue")
protected MockEndpoint outputQueue;
Donc maintenant, dans mon JUnit méthodes de test, je peux créer des attentes et d'interagir avec ces paramètres:
@Test
public final void processMethodShouldSendToOutputQueue()
{
Component comp = new Component();
comp.process();
outputQueue.assertIsSatisfied();
}
Je ne suis pas la compréhension de la façon de câbler le tout correctement:
- Comment puis-je connecter
comp
à lainputQueue
etoutputQueue
MockEndpoints? - Pour chaque
MockEndpoint
, comment puis-je définir des attentes de façon à ce queassertIsSatisfied()
vérifie qu'un message est présent à l'intérieur d'une file d'attente particulière, ou que l'un particulier de la file d'attente contient des messages?
OriginalL'auteur IAmYourFaja | 2011-12-20
Vous devez vous connecter pour publier un commentaire.
Adam, il y a plusieurs façons de le faire.
Pour POJO composants, blackbox, les tester séparément de tout le contexte Camel/routage de se concentrer sur la logique métier.
Si vous voulez le faire de bout en bout, les tests des routes, envisagez d'utiliser l'une de ces approches pour s'assurer que chaque étape dans l'itinéraire est satisfait.
Je préfère AdviceWith parce que sa très flexible et utilise le familier MockEndpoints. Pour un exemple complet de cette question, voir le cette unité de test
En bref, vous allez créer un test unitaire pour injecter MockEndpoints dans votre parcours et de valider ensuite contre eux, comme d'habitude...
Adam, pour la vraie fin à la fin de l'essai, l'utilisation AdviceWith à injecter MockEndpoints de façon dynamique dans votre filières de production. Se moquer est très puissant en raison de l'stats/affirmation Api qui sont fournis, mais ne doit PAS être ajoutée à la production des itinéraires directement. Je vais mettre à jour ma réponse avec un exemple de cela...
pouvez vous s'il vous plaît remplissez-vous d'un exemple montrant comment envoyer un
Exchange
pour la route ? Je demande ça parce qu'il n'est pas clair pour moi comment vous pouvez envoyer unExchange
à la route dufrom
. Merci à l'avance.bien sûr...j'ai mis à jour exemple pour inclure le modèle.sendBody() appel...voir la référencées test unitaire pour un exemple complet...
OriginalL'auteur Ben ODay