Wrapper des fonctions: pb avec ellipsis (les "...")
cs_kmcl
Messages postés2Date d'inscriptionjeudi 10 mai 2007StatutMembreDernière intervention11 mai 2007
-
10 mai 2007 à 14:55
cs_kmcl
Messages postés2Date d'inscriptionjeudi 10 mai 2007StatutMembreDernière intervention11 mai 2007
-
11 mai 2007 à 10:34
Bonjour,
Je suis en train de développer un outil de test black-box de composants soft de type dll. L'une des exigences qui m'est faite est la possibilité d'écrire un wrapper pour les fonctions à tester afin, notamment, de pouvoir instrumentaliser les appels.
En gros, pour tester une fonction telle que:
void foo( int x, float y );
on créer une fonction:
void WRAP_foo( int x, float y )
{
// do something
foo( x, y );
// do something else
}
Et c'est cette fonction wrappée qui est appelée dans les Test Cases à la place de l'originale.
Tout allait pour le mieux jusqu'à l'arrivée des "ellipsis" ! Plus clairement, comment wrapper des fonctions du type:
void bar( int x, ... ); ????
Là je suis sur un os que je ne parviens pas à ronger... Quelqu'un a-t'il les dents assez dures ou l'os est-il trop dur?
Merci d'avance!
Christophe
ncoder
Messages postés244Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 6 avril 20081 10 mai 2007 à 18:57
Ce n'est bien sûr qu'une suggestion, mais pourquoi tu ne regrouperais pas tous les arguments reçus par fonction void WRAP_bar( int x, ... ); grâce à va_list, va_start, va_arg, va_end (un exemple ici : http://www.cppfrance.com/codes/FONCTIONS-TAILLE-VARIABLE-ARGUMENTS_10301.aspx) et les "condenserais" un certain nombre d'arguments constant ?
Mais c'est suivant ce que fait ta fonction bar( int x, ... );
Par exemple, si tu as printf("Test %d %s", 1, "va_list" );
Tu renvoies
printf("Test 1 va_list");
ou bien
printf("Test ");
printf("1 ");
printf("va_list");
Ce qui revient exactement pareil à printf("Test %d %s", 1, "va_list" );
Tu auras fait ce que tu veux avant et après l'appel de ta fonction bien sûr.
Tout dépend de ce que fait ta fonction bar(int x, ...);
A+
Bonne programmation
<hr size="2" width="100%" /> Site
cs_kmcl
Messages postés2Date d'inscriptionjeudi 10 mai 2007StatutMembreDernière intervention11 mai 2007 11 mai 2007 à 10:34
Bonjour,
L'idée de "condensation" est très intéressante mais inapplicable ici... En effet, je développe un Framework de test en "boite-noire" et, du coup, je n'ai aucune connaissance --a priori-- de la fonction à wrapper et surtout je ne peux en aucun cas modifier le comportement de la fonction "bar" afin qu'elle se charge du redécoupage de la liste d'arguments.
La deuxième idée basée sur l'appel successif n'est pas possible non plus car je n'ai pas de postulat me disant que
bar(x, y, z); == bar(x); bar(y); bar(z);