Wann sollte ein Unit-Test-Framework verwendet werden (statt nur Asserts zu verwenden)?

8

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?

    
GreenMatt 15.07.2010, 16:57
quelle

6 Antworten

6

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

  • ausführlichere Meldung für Assertionsfehler: erwarteter vs. tatsächlicher Wert
  • Ausführung aller Testfälle anstelle des Anhaltens der ersten fehlgeschlagenen Assertion

Die beiden geben Hinweise darauf, wo der Fehler liegt.

    
philant 02.02.2010, 13:33
quelle
3

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.

    
Jason Evans 27.09.2011 14:24
quelle
1

Lernen Sie ein xUnit-Framework kennen - wenn Sie größere kommerzielle Projekte programmieren, werden Sie feststellen, dass diese umfangreich genutzt werden.

    
Paolo 01.02.2010 21:10
quelle
1
  

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. : -)

    
Jonik 09.03.2010 18:58
quelle
1

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.

%Vor%

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

%Vor%     
Lijo 03.02.2014 12:44
quelle
0

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%     
John Saunders 09.03.2010 19:05
quelle

Tags und Links