2010-11-22 32 views
4

J'ai un programme Java dont la méthode principale (dans la classe principale) attend les arguments de la ligne de commande. Le programme est également concurrent (utilise des threads et d'autres choses).Comment tester un programme Java concurrent qui attend des arguments de ligne cmd?

Je veux refactoriser massivement le programme. Avant de commencer le refactoring, je voudrais créer une combinaison de test pour la méthode principale. Je voudrais tester la méthode principale avec différents arguments de ligne cmd. Je veux exécuter ces tests automatiquement après chaque étape de refactoring que je fais. Comment créer un test qui passe les arguments de ligne cmd?

Je ne peux pas utiliser JUnit car, pour autant que je sache, cela ne fonctionne pas bien avec les programmes concurrents. Je ne suis pas sûr si vous pouvez passer des arguments de ligne cmd avec JUnit. J'utilise Eclipse.

Répondre

0

Envisagez d'utiliser JMeter. Avec JUnit sampler, vous pouvez facilement effectuer des tests JUnit simultanés et voir le résultat. Voir this question pour plus de détails.

0

Je ne connais pas les différents outils d'automatisation disponibles spécifiquement pour le multi-threading, je ne vais donc pas les commenter. Mais sur l'option simple mais efficace est de consigner les événements clés du programme en cours d'exécution dans un fichier CSV. Vous pouvez enregistrer le résultat final (s'il s'agit d'un programme de type calcul) ou vous déconnecter à chaque instance du programme où un état de clé est modifié ou un événement se produit. Comme il s'agit d'une application multithread vous devrez faire attention à comparer la séquence de données enregistrées, si vous ne pouvez pas garantir l'ordre relatif des événements clés que vous attendez, comparez ensuite la sortie à l'aide des résultats de type valeur-clé. De toute façon, l'idée serait de créer des fichiers de données de test que vous pouvez utiliser pour la comparaison automatisée lors des tests de retour.

0

Awaitility peut également être utile pour vous aider à écrire des tests unitaires déterministes. Cela vous permet d'attendre que l'état de votre système soit mis à jour. Par exemple:

await().untilCall(to(myService).myMethod(), greaterThan(3)); 

ou

await().atMost(5,SECONDS).until(fieldIn(myObject).ofType(int.class), equalTo(1)); 

Il a également Scala et le soutien Groovy.

await until { something() > 4 } // Scala example