Unit Testing - Wie geht es?

8

Ich möchte mein Programm (in C) testen, weil ich die Vorteile kenne, da es zeigt, wo das Problem liegt.

Ich auch gerne Blackbox-Test, da es mir sagt, ob das Programm funktioniert (zumindest für die Tests).

Im Moment benutze ich Autotest (was mit Autoconf kommt), um keine Abhängigkeit hinzuzufügen.

An dieser Stelle würde es mir nichts ausmachen, ein besseres Framework zu verwenden, aber das Problem ist, dass ich kein anderes Framework für Blackbox- und Unit-Tests verwenden möchte. Wäre es möglich, die Blackbox-Tests von einem Komponententest-Framework auszuführen? Das, was ich wirklich möchte, ist eine gute Protokollausgabe, die genau sagt, was falsch gelaufen ist und wo.

Meine andere Option ist der Komponententest mit Autotest. Das Problem ist, dass es keinen Rahmen gibt. Ich habe einen kleinen "Testtreiber" geschrieben, der den Namen der zu testenden Funktion und die Argumente akzeptiert, die an die Funktion übergeben werden sollen, und ruft diese Funktion auf. Das Problem ist, dass ich nicht sicher bin, welche Grenze zwischen Behauptungen zu verwenden und den Rückgabewert der Funktion auszugeben (für Protokollierungszwecke, da ich mag, wie Autotest mir einen Unterschied gibt). Da die meisten Funktionen Listen zurückliefern, ist es schneller, das Diff mit der erwarteten Ausgabe vorzubereiten (mit Autotest zu verwerfen).

    
alternative 25.11.2009, 23:27
quelle

2 Antworten

2
  

Wäre es möglich, die   Blackbox-Tests aus einem Komponententest   Rahmen?

Ja, Sie könnten den Autotest mit system() aus den Komponententests aufrufen und dann den zurückgegebenen Wert bestätigen.

Aber ich würde nicht empfehlen, das zu tun, da die Einheitentests sehr oft ausgeführt werden, sie sollten sehr schnell sein, d. h. gemessen in Sekunden, nicht in Minuten.

Komponententests und Integrationstests (die Sie Blackbox-Tests nennen) erfüllen verschiedene Zwecke: Komponententests bestätigen, dass die -Einheiten im Code (was immer das bedeutet, Funktion oder Funktionscluster) wie erwartet funktionieren die Tests, während Integrationstests das Programm Ende-zu-Ende abdecken und es als Ganzes validieren.

Typischerweise werden Komponententests nach jeder Änderung des Codes ausgeführt, insbesondere wenn Sie TDD anwenden, während Integrationstests ausgeführt werden, wenn eine Funktion hinzugefügt wurde.

Ich hätte lieber ein typisches Unit-Test-Programm (mit Assertions) und eine Integrationssuite, die zusätzlich zu Ihren Blackbox-Tests die Unit-Tests aufrufen würde.

  

Das Problem ist, dass ich nicht sicher bin, welche Grenze zwischen Assertions und verwendet werden soll   Ausgabe des Rückgabewerts der Funktion (für Protokollzwecke, seit   Ich mag, wie Autotest mir einen Unterschied gibt).

Bei Assertions gibt es nichts auszugeben: entweder die erwarteten und die tatsächlichen Werte sind gleich und nichts passiert, oder sie sind unterschiedlich und das UT-Framework gibt eine Fehlermeldung aus (erwartet ist X, ist tatsächlich Y). Das ist eine lassen Sie den Computer die Aufgabe des Testens.

Mit logging output diff muss das Ergebnis des diff noch manuell (visuell) überprüft werden (zB: fehlt ein Element in der Liste oder ein zusätzliches Element ...).

  

Da die meisten Funktionen Listen zurückgeben, ist es mit dem Diff schneller vorzubereiten   mit erwarteter Ausgabe (mit Autotest aufheben).

Vielleicht möchten Sie eine Funktion schreiben, die Listen mithilfe von Assertions vergleicht.

    
philant 26.11.2009, 11:33
quelle
0

Vielleicht möchten Sie CTest verwenden, das mit CMake geliefert wird, einem plattformübergreifenden make-System mit vielen Backends: Ссылка

PS: CMake ist viel mächtiger als Autotools auch.

    
Flavius 26.11.2009 19:35
quelle

Tags und Links