Test Unitaire (simple)

Portrait de nepta

Vous voulez faire des tests unitaire mais Cunit/JUnit/ les modules intégré a votre IDE vous semble lourd pour de simple test?
Pas de panique! premièrement qu'est-ce que c'est que ces tests unitaire dont j'entend tout le temps parler?

il peut être utile de savoir si votre fonction marche vraiment et souvent vous faites des tests unitaire sans le savoir, prenons notre bonne vielle fonction swap:

badSwap(int a, int b){
        int c = a;
        a = b;
        b = c;
}

pour voir si vous avez pas fait de bêtise, souvent vous faites un rapide test avec des valeurs bidon:

void test_badSwap(){
        int a = 42;
        int b = 1337;
        badSwap(a,b);
        printf("a: %d,  b: %d\n", a, b);
}

la vous voyez que la fonction marche pas et la corriger en conséquence, mais une fois la fonction débugué ces tests passe a l'oubliette!

Pourquoi ne pas tous les garder dans un coin (branch test par exemple) et les exécuter lorsque votre boss passe derrière vous pour montrer que vous faites de bon travail ; )

rendont ça un peu plus convivial (avec des couleurs °.°) grâce a une petite macro:

#define makeTest(test)	if(test()){ \
				puts("\e[1;32m"#test" pass\e[m"); \
			}else{ \
				puts("\e[1;31m"#test" fail\e[m"); \
			}

reste plus qu'a réécrire le test et a le lancer

int test_badSwap(){
        int a = 42;
        int b = 1337;
        badSwap(a,b);
        return (a == 1337) && (b == 42); // la fonction de test doit renvoyer 1 si le test réussi, 0 sinon
}
 
int main(){
        makeTest(test_badSwap);
        return 0;
}

voila! plus de raison de ne pas faire de test unitaire maintenant ; )

bonus: une fonction swap qui marche

#include <stdio.h>
#define makeTest(test)	if(test()){puts("\e[1;32m"#test" pass\e[m");} \
			else{puts("\e[1;31m"#test" fail\e[m");}
void badSwap(int a, int b){
	int c = a;
	a = b;
	b = c;
}
 
void goodSwap(int *a, int *b){
	int c = *a;
	*a = *b;
	*b = c;
}
 
int test_badSwap(){
	int a = 42;
	int b = 1337;
	badSwap(a,b);
 return (a == 1337) && (b == 42);
}
 
int test_goodSwap(){
	int a = 9;
	int b = 666;
	goodSwap(&a,&b);
 return (a == 666) && (b == 9);
}
 
int main(){
	makeTest(test_badSwap);
	makeTest(test_goodSwap);
        return 0;
}