2010-01-25 13 views
5

J'ai un outil Web qui, lorsqu'il est interrogé, renvoie des classes Java générées en fonction des arguments de l'URL.Génération de tests unitaires automatiquement

Les classes que nous récupérons sur le serveur web changent tous les jours et nous devons nous assurer qu'elles peuvent toujours traiter les entrées connues.

Notez que ces classes ne testent pas le serveur Web, elles s'exécutent localement et convertissent xml dans un format personnalisé. Je ne teste pas le serveur Web.

Ces classes doivent ensuite être placées dans une structure de package spécifique compilée et exécutée sur un ensemble connu de données d'entrée et comparées aux données de sortie connues.

Je voudrais faire cela automatiquement chaque nuit pour m'assurer que les classes générées sont correctes.

Quelle est la meilleure façon d'y parvenir?

Plus précisément ce qui est la meilleure façon de:

  1. récupérer le code à partir d'un serveur Web et placez-le dans un fichier
  2. compilez le code, puis l'appeler

Je suis sûr mélange de junit et de fourmi sera en mesure d'atteindre ce but, mais est-il là et une solution standard/approche pour cela?

+1

Une question similaire a été posée 18 minutes avant la vôtre: http://stackoverflow.com/questions/2131935/automatic-generation-of-unit-tests-for-java Vous pouvez aussi le suivre :) * Update * : vous êtes tous les deux de Londres .. Collègues? : o – BalusC

+0

Puisque celui-ci donne beaucoup plus de détails, que diriez-vous de voter pour fermer l'autre comme un dup de celui-ci? –

+0

Hahaha non, nous ne travaillons pas ensemble. Londres est une assez grande place. Merci pour votre aide –

Répondre

2

Tout d'abord, pour répondre à votre question: Non, je ne pense pas qu'il existe une approche standard pour cela. Cela ressemble à une situation assez inhabituelle ;-)

Étant donné que, ce que je ferais est d'écrire vos tests JUnit à tous appeler une classe GeneratedCode, puis, une fois que vous téléchargez le code, renommer la classe à GeneratedCode, compiler et lancez vos tests unitaires.

0

Vous devez créer une interface «simulacre» pour votre service Web qui (a) se comporte de la même manière et (b) renvoie une réponse connue.

Vous devriez ensuite effectuer d'autres tests d'intégration avec le service Web en direct, où une personne regarde les résultats et décide s'ils ont fonctionné.

+0

Salut, je viens de clarifier la question, ce n'est pas pour tester le webservice, je viens d'en récupérer des classes. –

+0

Je déteste les mocks. C'est généralement deux fois le travail de création du service Web en premier lieu, et vous finissez par passer tout votre temps de débogage à essayer de savoir si le bogue est dans le service Web ou le simulacre. –

+0

@ Paul Tomblin: Bien et mal. C'est censé être plus de travail. Si votre simulation nécessite beaucoup de débogage, alors vous n'avez pas compris la chose que vous vous moquiez assez bien. Si le service Web est mal défini, alors, c'est pareil pour le cours. Déboguer le simulacre est généralement plus simple que le débogage de l'application, donc il s'équilibre à la longue. Plus de temps à l'avance pour construire le simulacre. Moins en cours de débogage. –

2

Vous avez le même objectif que l'intégration continue ;-)

Peut-être un peu exagéré pour cette tâche simple, mais c'est le moyen standard pour obtenir quelque chose, quelque chose de compiler quelque chose et tester régulièrement.

E.g. vous pouvez essayer hudson.

+0

Pour moi, la tâche est plus l'automatisation de la construction, puis l'intégration continue. hudson est un bon conseil mais j'utiliserais maven (ou ant) ​​d'abord et utiliserais hudson pour exécuter les scripts de construction (fin appréciez les excellents rapports basés sur le web :)) –

+1

Que signifie "sth"? –

0

Ne pouvez-vous tester les classes générées qu'après leur publication sur le webservice? Vous n'avez aucun moyen de tester pendant ou juste après la génération? Une idée, si le code généré n'est pas complexe, est de le charger via le GroovyClassLoader et d'exécuter vos tests sur celui-ci. Voir this page pour des exemples.