Zastanawiam się, jak mogę wykorzystać testy jednostkowe w moim projekcie mcu i jakich strukturach mogę użyć, aby to uprościć.
Dzisiaj używam stm32 z OpenOCD-jtag z komputera z systemem Linux, gdzie wszystko jest kontrolowane z klasycznego pliku Makefile i kompilowane krzyżowo z gcc.
Mógłbym sam coś stworzyć, ale jeśli istnieje struktura, której mogę użyć, byłoby miło. (Jest to premia, jeśli środowisko może wyświetlać wynik w formacie, który Jenkins / Hudson może odczytać).
Czy istnieje sposób na użycie szkieletu testu jednostkowego z STM32?
Odpowiedzi:
Sprawdź CppUTest i znakomity http://pragprog.com/book/jgade/test-driven-development-for-embedded-c Jamesa Grenninga
CppUTest obsługuje C i C ++, i ma ładny zestaw szablonów Makefile, który bardzo szybko mnie uruchomił.
źródło
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:
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.
źródło
Sprawdź embUnit http://embunit.sourceforge.net/embunit/index.html . Jest to wbudowana platforma testowa dla jednostek C o niewielkiej powierzchni.
Z powodzeniem wykorzystaliśmy go w kilku wbudowanych projektach mikrokontrolerów. Nie spodziewaj się opcji i funkcji, które uzyskasz dzięki platformie testowania jednostek komputerowych. Ale jest zdecydowanie wystarczająco potężny.
Ma zdefiniowaną alokację dla ciebie, więc nie musisz tracić czasu na pisanie niestandardowych asercji, jak w przypadku minUnit.
źródło
Jakiś czas temu napisałem dokładny samouczek na ten temat: Testowanie jednostkowe (wbudowane) aplikacje C z Ceedling ; Używam tych technik w wielu projektach i do tej pory jestem całkiem szczęśliwy.
źródło
Właśnie się tym zajmowałem. Znalazłem tutaj trzyczęściowy artykuł, który opisuje strukturę testów jednostkowych:
http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools
Zgodziłbym się również ze wszystkim, o czym wspominał Austin.
źródło
Spróbuj kłaczków, ale nie sądzę, że jest to do testowania jednostkowego, do analizy kodu.
źródło