2010-08-23 14 views
0

Je dois tester les interactions entre 2 ou plusieurs clients Java dans un test complet de bout en bout.Comment puis-je tester les interactions entre 2 clients ou plus sur différentes machines virtuelles?

Sans les interfaces graphiques, idéalement, il devrait y avoir quelque chose de similaire à (syntaxe Junit):


@Test public void EndToEndTest(){ App firstApp = new App(); App secondApp = new App(); String msg = "something"; firstApp.send(msg); //this method will magically send msg to secondApp String msgReceived = secondApp.getLastMsg(); AssertEquals(msgReceived, msg); }

Le code ci-dessus est pas ce que je veux, car il rend les « apps » exécutées sur la même machine virtuelle. La solution que j'ai été capable de penser par moi-même était d'écrire une fausse main qui instancie le secondApps et écrit toutes ses sorties sur un fichier, le lance avec un appel système et vérifie ensuite le résultat mais il semble être une véritable exagération. De plus, avec une telle stratégie, il serait plus difficile (voire impossible) de tester également l'interface graphique.

Nous vous remercions de votre aide.

Répondre

0

processus:

Une solution serait d'utiliser Runtime.exec pour lancer un autre processus qui vous permettra de suivre ce processus à l'intérieur du processus qui a lancé. Ce nouveau processus sera exécuté sur une autre machine virtuelle Java. C'est équivalent à une fourchette.

Il existe de nombreuses mises en garde concernant le threading que vous devez gérer pour gérer un autre processus dans Java.

Ce tutoriel devrait aider: When Runtime.exec() won't

Communication:

Il y a quelques types de façons dont vous pouvez avoir plusieurs processus communiquent entre eux. Si vous utilisez Runtime.exec, vous pouvez communiquer via les flux d'entrée et de sortie de chaque programme.

C'est assez lent et la solution beaucoup mieux serait d'utiliser prises pour communiquer entre chaque processus directement.