Esistono molte variabili che determineranno il miglior framework di unit test da utilizzare nella tua situazione. Alcuni elementi che potrebbero influenzare la tua scelta saranno:
- La lingua di destinazione
- Quale supporto di libreria è disponibile. ad esempio libc o una sua versione ridotta.
- Il sistema operativo del target. ad es. Nessuno, FreeRTOS, personalizzato.
La maggior parte dei framework di tipo xUnit fornirà un livello base di funzionalità che può essere utile. Ho usato Cunit con un certo successo in passato. (pacchetto libcunit1-dev su Ubuntu / Debian). La maggior parte dei framework richiederà la disponibilità di libc, alcuni richiederanno supporto aggiuntivo per il sistema operativo.
Un altro altermativo che è lungo solo 3 righe è Minunit .
Ho trovato i test unitari che utilizzano il microcontrollore come obiettivo sono piuttosto ingombranti in quanto è necessario essere in grado di presentare un ambiente adatto per scaricare test, eseguirli e quindi ottenere risultati. Basta mettere in piedi la piattaforma che ti permetterà di farlo è un grosso compito.
Un altro approccio che ho adottato e che ha funzionato per me è quello di eseguire test di unità sull'host, implementando un livello di astrazione tra i driver e il codice dell'applicazione. Dato che stai usando gcc per la destinazione, il codice dovrebbe anche essere compilato sull'host.
Il test sull'host di compilazione è generalmente molto più semplice in quanto si dispone del supporto completo del sistema operativo host e di tutti i suoi strumenti. Ad esempio, durante i test sull'host, ho una versione derisa del mio driver wireless con la stessa interfaccia del driver reale che gira sulla destinazione. La versione host utilizza i pacchetti UDP per simulare il trasferimento di pacchetti wireless, con il driver simulato che supporta la possibilità di rilasciare i pacchetti in modo da poter testare i miei protocolli.
Nel prodotto su cui stavo lavorando, veniva utilizzato un sistema operativo thread, quindi il livello di astrazione per i test sul sistema operativo host utilizzava invece pthreads.
Sebbene non sia perfetto, più è facile per te scrivere ed eseguire test, più è probabile che tu implementi più casi di test. Un altro vantaggio di far funzionare il codice su piattaforme diverse è testare che il codice è portatile. Riceverai rapidamente errori endian se il target e le architetture host differiscono.
Ora sono un po 'fuori tema, ma penso che queste idee possano aiutare con la scelta del framework di test e dei metodi di test.