Nachdem ich einige Threads hier bei StackOverflow gelesen habe, bin ich zu dem Schluss gekommen, dass ich eine Form der testgetriebenen Entwicklung/Einheitstest übergehen sollte (oder zumindest das Gebiet erkunden sollte).
Und da wir über C-Code unter Linux sprechen, habe ich beschlossen, den siehe ein Versuch (Ich weiß nicht, ob das die richtige Wahl ist, aber wenn es nichts taugt, kann ich später immer noch etwas anderes ausprobieren).
Aber da das Konzept von Unit-Tests und Unit-Test-Frameworks für mich völlig neu ist, Ich habe damit begonnen, einige Unit-Tests an einem wirklich kleinen Testcode durchzuführen (aber ich war sowieso total verloren und hatte das Gefühl, dass mir etwas fehlt).
Bislang habe ich die folgende Datei erstellt:
- main.c, ein main, das nur eine Funktion namens my_pow aufruft und das Ergebnis ausgibt.
- my_pow.c, enthält die Funktion my_pow.
- my_pow.h
- my_pow_test.c habe ich mir gedacht, dass ich den Unit-Code für die Funktion my_pow hier platzieren sollte.
(Das "normale Programm" besteht also aus main.c, my_pow.c und my_pow.h.)
Dies ist my_pow.c
#include "my_pow.h"
int my_pow(int a, int b)
{
return (a*b);
}
Dann habe ich herausgefunden, dass ich in my_pow_test.c so etwas wie diese setzen:
#include <check.h>
#include "my_pow.h"
START_TEST (test_my_pow)
{
/* unit test code */
}
END_TEST
//do I need some sort off main here that calls test_my_pow?
Dies ist im Grunde dasselbe wie in das Kontrollhandbuch Kapitel 3.1, aber noch nicht....
Könnte mich bitte jemand auf den richtigen Weg bringen?
Danke Johan
Update: Kein Grund, warum ich versucht habe, Check zu verwenden, ich dachte nur, ich sollte irgendwo anfangen, vielleicht CUnit ist eine bessere Wahl (ich denke, ich würde versuchen, dass als gut und dann eine fundierte Entscheidung).
Update: Danke @philippe für den indirekten Hinweis, dass die Online-Dokumentation nur die halbe Wahrheit ist, der Beispielcode, der verdeutlicht, wovon die Dokumentation spricht, wurde bereits mit dem check-Paket installiert. Im Fall von Ubuntu /usr/share/doc/check/example/tests/
Aktualisierung: Das Codebeispiel wurde so erstellt, dass Sie sich zunächst seine erste Version ansehen, dann die zweite usw. usw. So konnten Sie verfolgen, wie er einen sehr einfachen Testfall/Code aus dem Nichts heraus zu etwas Nützlichem in traditioneller TTD-Manier erstellt.
Und da mein Code kaputt war und ich wollte, dass der Unit-Test dies beweist, habe ich ein wenig geschummelt und mit der echten pow-Funktion getestet. Etwas wie dies:
START_TEST (test_my_pow1)
{
int resultat = my_pow(3,3);
int math = pow(3,3);
fail_unless ( resultat == math,
"Error on 3^3 != %d (%d)",math, resultat);
}
Allerdings werde ich in Zukunft nicht reproduzieren, was bereits in den stdlibs steht :-)
Verwandt:
- Unit Testing von C-Code
- Wie man C-Code testet
- Unit Testing Frameworks für C
- Test-Frameworks für C
- Grundlegende Einheitstests und C, wie kann ich anfangen?
aus der Suche genommen [c] [unit-testing]
.
0 Stimmen
Wissen Sie, dass pow(a,b) != a*b ? ;-)
1 Stimmen
@Aif, ich denke, er weiß es. Aber um die Leistungsfähigkeit von Unit-Tests zu sehen und zu lernen, ist es keine schlechte Idee, mit einer fehlerhaften Funktion zu beginnen.