Istnieje wiele zmiennych, które określą najlepsze ramy testów jednostkowych do zastosowania w twojej sytuacji. Niektóre elementy, które mogą wpłynąć na twój wybór to:
- Język docelowy.
- Jaka obsługa bibliotek jest dostępna. np. libc lub jego obniżona wersja.
- System operacyjny celu. np. Brak, FreeRTOS, niestandardowy.
Większość ram typu xUnit zapewnia pewien podstawowy poziom funkcjonalności, który może być przydatny. W przeszłości korzystałem z Cunit . (pakiet libcunit1-dev na Ubuntu / Debian). Większość frameworków będzie wymagać libc, niektóre będą wymagały dodatkowej obsługi systemu operacyjnego.
Kolejną alternatywą, która ma tylko 3 linie, jest Minunit .
Odkryłem, że testowanie jednostkowe przy użyciu mikrokontrolera jako celu jest dość kłopotliwe, ponieważ musisz być w stanie przedstawić środowisko odpowiednie do pobierania testów, uruchamiania ich, a następnie odzyskiwania wyników. Przygotowanie platformy, która pozwoli ci to zrobić, jest dużym zadaniem.
Innym podejściem, które zadziałało dla mnie, jest testowanie jednostkowe na hoście, implementowanie warstwy abstrakcji między sterownikami a kodem aplikacji. Ponieważ używasz gcc jako celu, kod powinien również zostać skompilowany na hoście.
Testowanie na hoście kompilującym jest ogólnie o wiele łatwiejsze, ponieważ masz pełną obsługę systemu operacyjnego hosta i wszystkich jego narzędzi. Na przykład podczas testowania na hoście mam wyśmiewaną wersję mojego sterownika bezprzewodowego z tym samym interfejsem, co prawdziwy sterownik działający na celu. Wersja hosta używa pakietów UDP do symulacji bezprzewodowego transferu pakietów, a fałszywy sterownik obsługuje możliwość odrzucania pakietów, dzięki czemu mogę przetestować moje protokoły.
W produkcie, nad którym pracowałem, używany był wątkowy system operacyjny, więc warstwa abstrakcji do testowania na systemie hosta używała zamiast tego wątków.
Chociaż nie jest to idealne, im łatwiej jest pisać i uruchamiać testy, tym bardziej prawdopodobne jest, że zaimplementujesz więcej przypadków testowych. Kolejną zaletą uruchamiania kodu na różnych platformach jest testowanie, czy kod jest przenośny. Szybko wychwycisz błędy Endiana, jeśli architektura docelowa i hosta będą się różnić.
Teraz jestem trochę poza tematem, ale uważam, że te pomysły mogą pomóc w wyborze ramy testowej i metod testowych.