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).
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.
Tags und Links c unit-testing testing