Bonjour,
Je développe une appli Java qui est en fait un typechecker OCL. Pour cela, j'utilise JavaCC et le concept de visiteurs, chaque méthode visit de chaque noeud est donc enrichie pour effectuer un traitement spécifique (en l'occurrence du contrôle de type dans le cas présent).
J'aimerais donc utiliser JUnit pour tester tout ça, et là je vois pas trop de quelle façon je peux faire...
Est ce que c'est utile et pertinent de créer des cas de test pour chacun des noeuds et surtout comment est ce que c'est implémentable?
Par exemple, j'ai un noeud ASTName correspondant à un nom dans le code OCL. Dans ce cas, je vois en gros comment utiliser JUnit :
Code :
- public void testVisitASTNameDefSelfObject() {
- oclTC.setClassName("DVM" );
- ASTName node = new ASTName(0);
- node.setValue("amountRegistered" );
- Object returned = oclTC.visit(node, null);
- assertEquals("type attendu : OCLModelClass : DVM", _data.getElements().get("amountRegistered*DVM" ), returned);
- }
|
J'ai ce qu'il me faut. Par contre le problème vient des autres noeuds : le noeud Name est 'en bout de chaine', c'est à dire qu'il n'y a pas d'arborescence visitée en dessous pour resortir quelque chose, ce qui n'est pas le cas des autres noeuds.
Par exemple, j'ai un noeud ASTAbs : valeur absolue en OCL qui s'utilise comme ça :
Code :
- expressionNumérique.abs()
|
La grammaire me génère un noeud ASTAbs qui contient 4 fils (je sais c'est bizarre, mais c'est normal) dont un qui correspond à l'expression numérique en paramètre.
Il y a alors deux cas lors de la visite du noeud :
- soit l'expression est bien une expression numérique, en retour j'ai qqchose typé comme cette expression
- soit l'expression n'est pas numérique, dans ce cas, j'ai un message d'erreur et le retour correspond à une sorte de null.
Là je suis un peu coincé, je vois pas ce qu'il me faut construire pour créer ces deux cas de tests, comment passer l'expression...
De plus, ce ne sont pas forcément les retours de la méthode qui changent, mais plutôt des actions internes (genre ajouter le message d'erreur dans un vecteur de messages d'erreurs...)
Est ce que mon setUp doit me permettre de passer une Expression OCL et à partir de là me créer mon arbre correspondant?
Ca me parait assez lourd et du coup je vois plus vraiment l'intérêt d'utiliser JUnit
Enfin, voilà, si qqn a déjà utiliser ce genre de truc, je suis curieux de savoir comment ça peut se passer.
Merci
Message édité par squall36 le 29-04-2004 à 17:05:20