IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

test unitaire de code C en cunit


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut test unitaire de code C en cunit
    Bonjour tous le monde ,

    je suis en train de tester l'algorithme de saisie suivant a travers le gcc Linux , plate forme bien installé et testé .



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct {int num; float x; float y; }point
    void saisir (point*p ; int dim)
    { float xx , yy ; int i ; 
        for ( i = 0, i< dim-1, i++)
        { printf ("Relev N %1d :",i) ; 
          *(p+i).num=i;
          printf (" Donner l'abcisse  : " ) ; scanf ("%f" , &xx ) ;
          printf (" Donner l'ordonnee : " ) ; scanf ("%f" , &yy ) ;
          *(p+i).x = yy ; * (p+i).y=xx 
         }
    }

    Mes assertions de test sont les suivantes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void saisir_test_1 (void)
      {
        CU_ASSERT ( {22.1,8.9} == saisir((*p).x=22.1 , (*p).y = 8.9) );
        CU_ASSERT ( {0.5,7.2} == saisir((*p).x=0.5 , (*p).y = 7.2) );
        CU_ASSERT ( {6,6} == saisir((*p).x=6 , (*p).y = 6) );
       }
     
    void saisir_test_2 (void)
      {
        CU_ASSERT ( {5.4,-13}   == saisir((*p).x= 5.4, (*p).y = -13)   );
        CU_ASSERT ( {-9.4,17.1} == saisir((*p).x=-9.4, (*p).y =  17.1) );
        CU_ASSERT ( {-17,-4}    == saisir((*p).x=-17 , (*p).y = -4 )   );
     
       }

    Mais lors de compilation il me génére cette erreure
    error: macro "CU_ASSERT" passed 2 arguments, but takes just 1

    selon le message donné l'erreur est syntaxique , Si quelqu'un peut me donner la bonne forme pour ajouter mes assertions de test . je serai reconnaisant . et merci

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    A mon avis il y a déjà trop d'erreurs de compilation avant les assertions, il faudrait peut-être les traiter en premier:

    typedef struct {int num; float x; float y; }point;

    for ( i = 0; i< dim-1; i++)

    Etc... Ci dessous un exemple d'utilisation de la macro assert qui prend deux paramètres et procède à la comparaison. Si les paramètres ne sont pas identiques, un message d'erreur est affiché et le programme s'arrête. En fait cette macro sert à vérifier des fonctions purement soft: Là, tu impliques l'utilisateur dans une saisie, ce qui n'est pas censé faire partie de tests unitaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include <assert.h>
     
    int add(int a, int b)
    {
        return a + b;
    }
     
    int main(void)
    {
        assert(add(78, 15) == 93);
        /* bad assertion */
        assert(add(78, 15) == 92);
     
        return 0;
    }
    Bonne continuation.

    Pfeuh

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Je te conseille de commencer par apprendre le C. Tes deux morceaux de C sont bourrés d'erreurs grossières. Je t'en donne quelques unes :

    - A la fin de ton typedef il manque un point-vigule
    - Les arguments de ta fonctions sont séparés par des point-virgules alors qu'il faudrait des virgules
    - Dans ton programme CUnit, il faut te créer une variable locale pour la structure, l'initialiser, puis la passer à saisir() dans un CU_ASSERT. Ce que tu écris ((*p).x= 5.4), ce n'est pas du C.
    - Ta fonction saisir() ne retourne rien. Il est donc absurde de tester son retour dans le CU_ASSERT.

  4. #4
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Bonjour,

    Ton assertion est bizarre ; tu utilises un semblant de littéral agrégat, mais sans la bonne syntaxe. En C99, on pourrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct { int x, y; } point;
     
    int
    cmp_points (point *p, point *q)
    {
      return p->x == q->x && p->y == q->y;
    }
     
    void
    saisir (void)
    {
      CU_ASSERT (cmp_points (&(point) { .x = 22, .y = 8 }, f (&(point) { .x = 22, .y = 8 })));
    }
    Mais, dans ce cas-là, il vaut mieux passer par une variable temporaire. Note que, si les membres de ta structure sont des flottants, les comparer se complique un peu (utiliser l'opérateur == n'est alors pas vraiment une bonne pratique). Sans doute devrais-tu d'abord poser les spécifications de ton application sur papier, et nous les communiquer. Car ton utilisation des tests unitaires ici me semble étrange.

    Bonne journée.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

Discussions similaires

  1. [WD19] Couverture du code & test unitaire
    Par tunizar dans le forum WinDev
    Réponses: 8
    Dernier message: 06/10/2014, 13h59
  2. Tests unitaires avec CUnit
    Par cyrill.gremaud dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 15/11/2012, 19h20
  3. Test unitaire : mesure de recouvrement de code
    Par Sunsawe dans le forum Autres éditeurs
    Réponses: 17
    Dernier message: 16/05/2012, 10h41
  4. JUnit 4 problème écriture test unitaire et code coverage
    Par Tibzz dans le forum Général Java
    Réponses: 0
    Dernier message: 07/09/2011, 18h05
  5. [TESTS] Tests unitaires
    Par mathieu dans le forum Test
    Réponses: 4
    Dernier message: 08/01/2004, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo