2009-10-29 3 views
16

Je dois écrire une très grande suite de tests pour un ensemble complexe de règles métier actuellement capturées sous plusieurs formes tabulaires (par exemple, si les paramètres X Y Z sont tels et tels, la valeur doit être comprise entre V1 et V2). Chaque règle a un nom et sa propre sémantique.Est-il possible de générer par programme des cas de test et des suites JUnit?

Mon but ultime est d'avoir une suite de tests, organisés en suites de test sous, avec un test à chaque règle.

Une option consiste à réellement coder toutes ces règles en tant que tests. C'est moche, ça prend du temps et c'est inflexible.

Une autre est d'écrire un script Python qui lirait les fichiers de règles et générer des classes Java avec les tests unitaires. Je préfère éviter cela si je le peux. Une autre variante serait d'utiliser Jython.

Idéalement, mais je voudrais avoir une suite de tests qui lirait les fichiers, et je puis définir des sous-suites et des tests en leur sein. Chacun de ces tests peut être initialisé avec certaines valeurs extraites des fichiers de table, exécuter des points d'entrée fixes dans notre système, puis appeler une fonction de validation sur les résultats en fonction de la valeur attendue.

Existe-t-il un moyen raisonnable de le faire en utilisant seulement Java?

Mise à jour: J'ai peut-être un peu simplifié notre genre de règles. Certains d'entre eux sont en effet tabulaires (style excel), d'autres sont plus flous. La question générale reste cependant car je ne suis probablement pas la première personne à avoir ce problème.

+0

Très intéressé à savoir à ce sujet; J'ai besoin d'en savoir plus sur les cas de test. – I82Much

Répondre

17

Dans JUnit 4 vous voulez regarder le Parameterized runner. Il a été créé dans le but que vous décrivez (tests pilotés par données). Il ne les organisera pas en suites cependant.

Dans Junit 3, vous pouvez créer des TestSuites et des tests par programme. La réponse est dans Junit Recipes, que je peux développer si vous en avez besoin (rappelez-vous que JUnit 4 peut exécuter des tests Junit 3).

8

Avez-vous envisagé d'utiliser FIT pour cela?

Vous semblez avoir les tables déjà prêtes, et des « règles métier » sonne comme « les gens d'affaires les écrire en utilisant Excel ».

FIT est un système de contrôle des tests basés sur des tables avec entrées-> mappings de sortie attendus, et une bibliothèque java open source pour l'exécution de ces tests disponibles.

+0

Il existe également des pilotes Java pour cela. –

+0

C'est ce que j'allais dire; votre cas ressemble exactement au genre de chose que l'on voulait résoudre; Je recommande Fitnesse (http://fitnesse.org) car c'est la mise à jour la plus récente et la plus actuelle à laquelle je puisse penser. – Kevlar

+0

Merci. Je suis familier avec FIT, mais je ne connaissais pas les nouvelles implémentations; Je vais les vérifier. Pourtant, je me demande s'il existe une façon programmatique de rester au sein de JUnit. – Uri

1

Nous avons essayé FIT et avons décidé d'aller avec Concordion. Les principaux avantages de cette bibliothèque sont les suivants:

  • les tests peuvent être vérifiés à côté de la base de code (dans un dépôt Subversion, par exemple)
  • ils sont exécutés par un coureur standard JUnit
0

J'ai écrit quelque chose de très similaire en utilisant JUnit. J'ai eu un grand nombre de cas de test (30 pages) dans un fichier XML. Au lieu d'essayer de générer différents tests, j'ai tout fait en un seul test, ce qui a très bien fonctionné.

Mon test a regardé quelque chose comme ceci:

void setup() { 
    cases = read in the xml file 
} 

void test_fn_works() { 
    for case in cases { 
    assert(case.expected_result, fn(case.inputs), 
     'Case ' + case.inputs + ' should yield ' + case.expected_result); 

    } 
} 

Avec Ruby, je l'ai fait exactement ce que vous êtes des tests de production saying-- à la volée.Faire cela en Java, cependant, est complexe, et je ne pense pas que cela en vaille la peine puisqu'il existe une autre approche, assez raisonnable.

Espérons que cela aide.

Questions connexes