Wie führen Sie Unit-Test wie Tests in C durch? Welches Framework oder machen Sie andere Tests als Unit-Tests auf Codeebene?So testen Sie C-Code
Antwort
Check ist eine gute Test-Framework für C
XCode auf Mac etwas hat sie CPTest Art eingebauter gerufen. Ich habe eine portable Version, die ich hier gepostet
http://www.loufranco.com/blog/files/AppleCppUnitPort.html
ich gcc unter Windows wurde Targeting, aber ich glaube, es würde an anderer Stelle arbeiten, und es ist ein sehr einfaches Framework, wenn Sie sehen wollen, wie so etwas zu implementieren .
Informationen zu einer Anzahl von C-Unit-Testgerüsten finden Sie unter www.xprogramming.com, insbesondere unter software.
Sie können einen Blick auf cfix werfen - es ist ein Unit-Test-Framework für Win32-Plattformen und NT-Kernel-Modus spezialisiert. Unterstützt sowohl C als auch C++.
Wenn Sie Windows als Entwicklungsumgebung verwenden, CUnitWin32 könnte Ihr Zweck
Persönlich mag ich die Google Test framework dienen.
Die eigentliche Schwierigkeit beim Testen von C-Code besteht darin, die Abhängigkeiten von externen Modulen zu trennen, sodass Sie Code in Einheiten isolieren können. Dies kann besonders problematisch sein, wenn Sie versuchen, Tests mit altem Code durchzuführen. In diesem Fall benutze ich häufig den Linker, um Stubs-Funktionen in Tests zu verwenden.
Darauf beziehen sich die Leute, wenn sie über "Nähte" sprechen. In C ist Ihre einzige Option wirklich, den Pre-Prozessor oder den Linker zu verwenden, um Ihre Abhängigkeiten zu verspotten.
Eine typische Test-Suite in eines meiner C-Projekten könnte wie folgt aussehen:
#include "myimplementationfile.c"
#include <gtest/gtest.h>
// Mock out external dependency on mylogger.o
void Logger_log(...){}
TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}
Beachten Sie, dass Sie tatsächlich mit der C-Datei und nicht die Header-Datei. Dies bietet den Vorteil des Zugriffs auf alle statischen Datenelemente. Hier verspotte ich meine Logger (die in logger.o sein könnte und eine leere Implementierung geben. Dies bedeutet, dass die Testdatei unabhängig von dem Rest der Codebasis kompiliert und verlinkt und isoliert ausgeführt wird.
kompilieren des codes, damit das funktioniert, braucht man gute einrichtungen auf dem target. ich habe das mit googeltest cross kompiliert nach linux auf einer PowerPC architecture gemacht, das ist sinnvoll, weil man dort eine vollständige shell und os hat um die ergebnisse zu sammeln Rich-Umgebungen (die ich als alles ohne ein volles Betriebssystem klassifiziere) sollten Sie nur auf dem Host erstellen und ausführen. Sie sollten dies trotzdem tun, damit Sie die Tests automatisch als Teil des Builds ausführen können.
Ich finde C++ - Testcode ist in der Regel viel einfacher aufgrund der Tatsache, dass OO-Code in ist Allgemein viel weniger gekoppelt als prozedural (das hängt natürlich sehr vom Programmierstil ab). Auch in C++ können Sie Tricks wie Dependency Injection und Method Overriding verwenden, um Nähte in Code zu bekommen, der ansonsten gekapselt ist.
Michael Feathers hat eine excellent book about testing legacy code. In einem Kapitel behandelt er Techniken zum Umgang mit Nicht-OO-Code, die ich sehr empfehle.
bearbeiten: Ich habe eine blog post über Unit-Tests prozeduralen Code, mit source available on GitHub geschrieben.
- 1. So testen Sie Menü
- 2. So testen Sie APIs
- 3. Wie verwende ich CCode-Attribute in Vala?
- 4. So testen Sie eine WSDL
- 5. So testen Sie eine Bereitstellung
- 6. So testen Sie die Routerrouten:
- 7. So testen Sie Spring @Scheduled
- 8. So testen Sie send_file flask
- 9. So testen Sie sbt Resolver
- 10. So testen Sie asynchronen Code
- 11. So testen Sie srcset Algorithmus
- 12. So testen Sie die Thread-Sicherheit
- 13. So testen Sie App für Vista
- 14. So testen Sie Massen-E-Mail-Skript
- 15. So testen Sie Dateiupload mit Jasmine BDD
- 16. So testen Sie ein Intellij-Plugin
- 17. So testen Sie eine URL in jQuery
- 18. So testen Sie Firebase messaging refreshToken
- 19. So testen Sie ein Fragment mit Espresso
- 20. So testen Sie einen UIViewController - TDD/BDD
- 21. So testen Sie HttpApplication-Objekt mit HttpApplicationState
- 22. So testen Sie auf destroy scope
- 23. So testen Sie Etiketten in QTP
- 24. So testen Sie das zurückgegebene JSON-Ergebnis?
- 25. So testen Sie einzelne Datei unter Pytest
- 26. So testen Sie Google App lädt
- 27. So testen Sie clientseitige Akka HTTP
- 28. So testen Sie Ausnahmen im Labor?
- 29. Mocha: So testen Sie Express gerendert Ansichten
- 30. So testen Sie Aktionsfilter in ASP.NET MVC?
http://stackoverflow.com/questions/65820/unit-testing-c-code – mmcdole