Ich arbeite an einem kleinen (derzeit bei 150, wahrscheinlich weniger als 500, wenn ich fertig bin) C-Projekt, an dem ich arbeite, ich bringe mir selbst testgetriebene Entwicklung bei. Basierend auf einigen Sachen, die ich im Internet gefunden habe - vor allem auf diesen Folien von Olve Maudal , ich habe gerade Behauptungen in meinen Komponententests verwendet.
Da ich gerade tdd lerne, habe ich bisher den Aufwand vermieden, auch ein Einheitentestframework wie cunit zu lernen. An dieser Stelle denke ich, dass die zusätzliche - wenn auch geringe - Lernkurve eines Rahmens den Aufwand für ein so kleines Projekt nicht wert ist. Ich frage mich: Ist das falsch (d. H. Ich wäre besser dran, jetzt das Framework zu lernen)? Wann lohnt sich ein Framework zu lernen?
Der Break-even zum Erlernen eines Unit-Test-Frameworks ist nicht lange zu erreichen. Zwei Hauptvorteile, die man mit einem Framework gegenüber der Verwendung der assert () - Funktion erhält, sind
Die beiden geben Hinweise darauf, wo der Fehler liegt.
Aus meiner Erfahrung mit .NET-Unit-Testing-Frameworks habe ich ziemlich viel mit einem kleinen Projekt begonnen, das mir den Vorteil bot, dass ich das, was ich gelernt hatte, später auf andere Projekte anwenden konnte, unabhängig von ihrer Größe. p>
Ich schätze, du denkst vielleicht, worum es geht, es ist momentan nur ein kleiner Code, aber ich denke, es würde dir gut tun, jetzt und nicht später in ein Framework zu kommen. Es ist ein bisschen wie Auto fahren - ich habe mit 17 Jahren fahren gelernt, obwohl ich erst zwei Jahre später mein eigenes Auto bekommen habe. Ich hätte es einfach ignorieren können, Unterricht zu nehmen, bis ich mein Auto hatte, aber ich bestand und hatte bereits die Fähigkeiten, einfach weiterzugehen und zu fahren.
Es ist ein bisschen eine seltsame Analogie, aber ich denke, wenn es darum geht, etwas wie ein Framework oder eine Bibliothek zu lernen - man weiß nie, was es für Sie praktisch ist.
Da ich gerade tdd lerne, habe ich bisher den Aufwand vermieden, auch ein Einheitentestframework wie cunit zu lernen. An dieser Stelle denke ich, dass die zusätzliche - wenn auch geringe - Lernkurve eines Rahmens den Aufwand für ein so kleines Projekt nicht wert ist. Ich frage mich: Ist das falsch (d. H. Ich wäre besser dran, jetzt das Framework zu lernen)? Wann lohnt sich ein Framework zu lernen?
Ich stimme Philippe, Jason und Paolo zu, aber ich wollte noch einen anderen Blick darauf werfen:
Die so genannten xUnit Frameworks sind sehr einfach und leicht, sowohl als auch Bibliothek zum Download (Binärdateien von zB neuesten JUnit oder CUnit sind etwa 200 Kilobyte) und, genauer gesagt, konzeptionell.
Wenn Sie überhaupt irgendwelche Unit-Tests durchführen (oder machen möchten), würden Sie definitiv von einem bewährten Tool profitieren, und das Lernen von xUnit wird sich sofort auszahlen. Ich denke, dass Sie den "Overhead" etwas überschätzt haben - lassen Sie sich nicht vom Wort "Framework" erschrecken ;-) - Sie werden in einer halben Stunde oder weniger mit xUnit arbeiten.
Disclaimer: Ihre Frage ist nicht mit C markiert, also habe ich sie als sprachunabhängig angesehen. Ich weiß nicht, ob Unit-Tests auf der C-Seite (im Vergleich zu Java) sehr unterschiedlich sind, aber ich bezweifle es. : -)
Es folgt ein C # .Net-Beispiel, in dem ein Moq framework
in einem MSTest mit Visual Studio nützlich ist.
Beobachten Sie den Unterschied zwischen TestOld()
und MoqTest()
. Der Zweck beider Tests ist gleich. Aber in TestOld()
muss ich MyMemberManagerForTest
konkrete Implementierung schreiben. Während in MoqTest()
, das Moq-Framework wird die Aufgabe für mich erledigen.
Referenz: Verwenden der Mock-Bibliothek für das Testen Ihrer Unit in C #
%Vor% Damit diese Art von Tests funktioniert, ist es wichtig, dass der Code Dependency Injection
verwendet, wie Sie im überladenen LibraryCore-Konstruktor sehen können
Eine Anmerkung: Wenn Sie dem normalen Muster des Rot-Grün-Refactors folgen, sollte sich der resultierende Code bei der Umgestaltung Ihrer Komponententests zu einem Unit-Test-Framework entwickeln. Zum Beispiel sollten Sie nicht zwei Kopien von Code haben, der
tut %Vor%Das sollte in etwas wie
umgestaltet werden %Vor%Tags und Links unit-testing tdd