Es gibt viele Variablen, die das beste Unit-Testing-Framework für Ihre Situation bestimmen. Einige Punkte, die Ihre Wahl beeinflussen können, sind:
- Die Zielsprache.
- Welche Bibliotheksunterstützung ist verfügbar? zB libc oder eine gekürzte Version davon.
- Das Betriebssystem des Ziels. zB None, FreeRTOS, custom.
Die meisten xUnit-Frameworks bieten eine Basisfunktionalität, die nützlich sein kann. Ich habe Cunit in der Vergangenheit mit einigem Erfolg verwendet. (libcunit1-dev-Paket unter Ubuntu / Debian). Für die meisten Frameworks muss libc verfügbar sein, für einige ist zusätzliche Unterstützung für das Betriebssystem erforderlich.
Eine weitere Alternative, die nur 3 Zeilen lang ist, ist Minunit .
Ich habe festgestellt, dass Unit-Tests mit dem Mikrocontroller als Ziel ziemlich umständlich sind, da Sie in der Lage sein müssen, eine Umgebung zu präsentieren, in der Sie Tests herunterladen, ausführen und dann die Ergebnisse zurückholen können. Es ist schon eine große Aufgabe, die Plattform zu installieren, mit der Sie dies tun können.
Ein weiterer Ansatz, den ich gewählt habe, ist das Testen von Einheiten auf dem Host, wobei eine Abstraktionsschicht zwischen den Treibern und dem Anwendungscode implementiert wird. Da Sie gcc als Ziel verwenden, sollte der Code auch auf dem Host kompiliert werden.
Das Testen auf dem Compile-Host ist im Allgemeinen so viel einfacher, da Sie die vollständige Unterstützung des Host-Betriebssystems und aller seiner Tools haben. Wenn ich zum Beispiel auf dem Host teste, habe ich eine verspottete Version meines drahtlosen Treibers mit der gleichen Schnittstelle wie der echte Treiber, der auf dem Ziel ausgeführt wird. Die Host-Version verwendet UDP-Pakete, um die drahtlose Paketübertragung zu simulieren. Der Mock-Treiber unterstützt die Möglichkeit, Pakete zu verwerfen, damit ich meine Protokolle testen kann.
In dem Produkt, an dem ich gearbeitet habe, wurde ein Betriebssystem mit Threads verwendet, sodass die Abstraktionsebene zum Testen auf dem Host-Betriebssystem stattdessen Pthreads verwendete.
Obwohl dies nicht perfekt ist, ist es umso wahrscheinlicher, dass Sie mehr Testfälle implementieren, je einfacher Sie Tests schreiben und ausführen. Ein weiterer Vorteil der Ausführung des Codes auf verschiedenen Plattformen besteht darin, dass getestet wird, ob der Code portabel ist. Sie werden Endian-Fehler schnell erkennen, wenn sich Ziel- und Host-Architektur unterscheiden.
Ich bin jetzt ein bisschen vom Thema abwesend, aber ich bin der Meinung, dass diese Ideen bei der Auswahl des Testgerüsts und der Testmethoden hilfreich sein können.