CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C module] test unitaire

oswim10
oswim10
Niveau 10
07 mai 2013 à 21:19:00

Bonsoir,

J'ai un projet à rendre et je dois tester tous mes modules en faisant des test unitaires.

Tout d'abord, un exemple:

Dans un module, j'ai définis un arbre comme cela:

arbre.h =>
define struct etiArbre *Arbre;
arbre.c =>
define struct etiArbre
{int rac;
struct etiArbre *suiv;
struct etiArbre *prec;
}ArbreInterne;

Mais pour tester les fonctions de ce modules (tests qui se font dans un module TestArbre.c), je dois pouvoir avoir accés à la définition de la structure: par exemple, si je veux tester si ma fonction ajoutant un entier dans l'arbre fonctionne correctement (c'est un arbre GRD), je dois pouvoir vérifier que (par exemple avec Arbre a et l'entier ajouté 10) a->rac = 10
Or, je ne peux le faire puisque struct etiArbre n'est pas définis dans arbre.h.

D'où ma question: je peux, juste pour ce module (mis dans un dossier différent des autres), mettre la définition de 'struct etiArbre' dans arbre.h ou j'inclus complétement arbre.c dans mon module de test?(mais dans ce cas, autant copier le contenue de arbre.c et arbre.h directement dans testArbre.c, non?) Ou je ne dois aps faire cela? [et dans ce cas, je fais comment?]

Merci d'avance^^

godrik
godrik
Niveau 30
07 mai 2013 à 22:03:31

Les test unitaires dependent de ton "unite". Si l'unite est ta structure d'arbre, alors test qu'elle fonctionne correctement. Quelles sont les fonctions definies sur ton arbres et comment sont elles supposee fonctionner. Ecrit un test qui verifie ca exactement.

oswim10
oswim10
Niveau 10
07 mai 2013 à 22:16:27

Mais comment suis-je sensé vérifier que la valeur 13 soit bien dans le sous-arbre droit de l'arbre contenant la valeur 10? (si on a un arbre avec les valeurs 10 et 13)
parce que poursavoir si une fonction (parxemple celle pour ajouter une valeur dans l'arbre) fonctionne correctement, il faut bien que je regarde ce qu'il y a dans l'arbre, non? Et pour regarder saus utiliser d'autre fonction de arbre.c, je dois avoir accés à la définition de cette structure; ou j'ai absolument rien compris dans la manière de tester ?

Pseudo supprimé
Pseudo supprimé 07 mai 2013 à 22:17:09

Un test unitaire ne doit effectivement pas impliquer de modules tiers : lorsque tu testes unitairement, tu dois garantir que tu couvres exactement la fonction testée et que rien d'autre ne peut provoquer un passage ou un échec de l'étape. Il existe des frameworks de tests obligeant le cloisonnement (provoquant une erreur dès qu'un élément extérieur au périmètre entre dans l'exécution (par exemple, ouverture d'une connexion réseau lors du test d'un calcul de débit). C'est la bonne approche de cloisonner. Sinon, ça s'appelle du test fonctionnel et c'est presque impossible d'être exhaustif. Au mieux, tu auras un état "j'ai l'impression que mon programme respecte le contrat".

Pseudo supprimé
Pseudo supprimé 07 mai 2013 à 22:21:00

oswim10, c'est justement le principe du test unitaire : tu as testé le plus petit atome de ton programme, tu remontes ensuite en granularité. Tu ne vas pas tester un arbre à n feuilles : à moins de prouver ton programme, c'est impossible, tu vas par contre tester les cas limites : tu n'auras plus ensuite besoin dans les autres tests de revalider ce genre de choses.

Mais oui, le test unitaire est assez contraignant s'il est suivi.

A a besoin de B pour fonctionner.

Tu testes B
Tu testes A en simulant B (mock).

oswim10
oswim10
Niveau 10
07 mai 2013 à 22:38:46

hum, je pense que vous n'avez pas compris ce que je veux tester (ou sinon, je ne vois absolument pas comment tester le module ;( )

J'ai un Module arbre séparé en 2 fichier:
---------------------------------
1)arbre.h contenant:

typedef struct etiArbre *Arbre;
void AjouterEntier(Arbre *, int);
--------------------------------
2)arbre.c contenant:

typedef struct etiArbre
{
int rac;
struct eti *suiv;
struct eti *prec;
}ArbreInterne;

void AjouterEntier(Arbre *a, int x)
{ [coprs de la fonction]}
---------------------------------

Je dois faire le test de ce module dans un fichier appelé TestUnitaireArbre.c

Pour cela, il faut que je prenne par exemple 3 tableaux de différentes valeurs non classées; que je rentre d'abord le tableaux 1 dans l'arbre, puis que je regarde si le résultt est correct (si pas correct, je l'affiche); puis je fais pareil avec le tableau 2 dans un nouvel arbre, de même pour le tableau 3. [c'est comme ca qu'il faut faire, non?]

Mais pour vérifier que les valeurs sont bien classés dans l'arbre, je fais comment? (car la définition de la structure est dans le fichier arbre.c, donc je n'est pas accés à suiv, prec et rac de l'arbre..)

Pseudo supprimé
Pseudo supprimé 07 mai 2013 à 22:43:22

Ben, c'est justement "arbre.c" que tu dois tester unitairement. TU ne vas pas tester les prototypes vides, si :D ?

Pseudo supprimé
Pseudo supprimé 07 mai 2013 à 22:44:52

PS: Tu utilises un framework pour tes tests unitaires ou tu passes justes par des "assert" et autres ??

oswim10
oswim10
Niveau 10
07 mai 2013 à 22:54:45

Ben en cours, on nous avez dit de faire un fichier test, dans lequel on prend quelques valeurs et on compare le résultat obtenue avec le résultat attendue, donc j'ai pas de assert dans le code..

[Mais si j'ai bien compris, je dois juste mettre '#include "arbre.c"' dans le fichier 'TestUnitaireArbre.c'?

Pseudo supprimé
Pseudo supprimé 08 mai 2013 à 00:00:32

Ben oui, vu que c'est ce que tu testes :D

oswim10
oswim10
Niveau 10
08 mai 2013 à 00:04:11

OK, merci^^ (a toi aussi godrik)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment