Ich bin nicht weit gekommen, eine ältere C-Anwendung zu testen, bevor ich nach einer Möglichkeit gesucht habe, Funktionen zu verspotten. Ich brauchte dringend Mocks, um die C-Datei, die ich testen möchte, von anderen zu isolieren. Ich habe es mit cmock versucht und ich denke, ich werde es übernehmen.
Cmock scannt Header-Dateien und generiert Mock-Funktionen basierend auf den gefundenen Prototypen. Mit Mocks können Sie eine C-Datei in perfekter Isolation testen. Alles, was Sie tun müssen, ist, Ihre Testdatei mit Mocks anstelle Ihrer realen Objektdateien zu verknüpfen.
Ein weiterer Vorteil von cmock besteht darin, dass Parameter überprüft werden, die an verspottete Funktionen übergeben werden, und dass Sie angeben können, welchen Rückgabewert die Mocks bereitstellen sollen. Dies ist sehr nützlich, um verschiedene Ausführungsabläufe in Ihren Funktionen zu testen.
Tests bestehen aus den typischen Funktionen testA (), testB (), in denen Sie Erwartungen erstellen, Funktionen aufrufen, um Asserts zu testen und zu überprüfen.
Der letzte Schritt besteht darin, einen Läufer für Ihre Tests mit Einheit zu generieren. Cmock ist an das Unity-Test-Framework gebunden. Unity ist so einfach zu erlernen wie jedes andere Unit-Test-Framework.
Einen Versuch wert und ganz einfach zu verstehen:
http://sourceforge.net/apps/trac/cmock/wiki
Update 1
Ein weiteres Framework, das ich untersuche, ist Cmockery.
http://code.google.com/p/cmockery/
Es ist ein reines C-Framework, das Unit-Tests und Verspottungen unterstützt. Es hat keine Abhängigkeit von Ruby (im Gegensatz zu Cmock) und es hat nur eine sehr geringe Abhängigkeit von externen Bibliotheken.
Das Einrichten von Mocks erfordert etwas mehr manuelle Arbeit, da keine Codegenerierung durchgeführt wird. Das bedeutet nicht viel Arbeit für ein bestehendes Projekt, da sich an Prototypen nicht viel ändern wird: Sobald Sie Ihre Verspottungen haben, müssen Sie sie für eine Weile nicht mehr ändern (dies ist mein Fall). Zusätzliche Eingabe bietet vollständige Kontrolle über Mocks. Wenn es etwas gibt, das Sie nicht mögen, ändern Sie einfach Ihren Schein.
Kein spezieller Testläufer erforderlich. Sie müssen nur ein Array von Tests erstellen und an eine Funktion run_tests übergeben. Auch hier etwas mehr manuelle Arbeit, aber ich mag definitiv die Idee eines in sich geschlossenen autonomen Rahmens.
Außerdem enthält es einige raffinierte C-Tricks, die ich nicht kannte.
Insgesamt benötigt Cmockery ein bisschen mehr Verständnis für Mocks, um loszulegen. Beispiele sollen Ihnen helfen, dies zu überwinden. Es sieht so aus, als könnte es die Arbeit mit einfacheren Mechaniken erledigen.