Wrapper des fonctions: pb avec ellipsis (les "...")

Messages postés
2
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mai 2007
- - Dernière réponse : cs_kmcl
Messages postés
2
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 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
Afficher la suite 

2 réponses

Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
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
Commenter la réponse de ncoder
Messages postés
2
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mai 2007
0
Merci
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);

C'est vraiment un os...

Merci quand même!
A+
Commenter la réponse de cs_kmcl