Existem muitas variáveis que determinarão a melhor estrutura de teste de unidade a ser usada em sua situação. Alguns itens que podem afetar sua escolha serão:
- O idioma alvo.
- Qual suporte de biblioteca está disponível. por exemplo, libc ou uma versão reduzida dela.
- O sistema operacional do destino. por exemplo, Nenhum, FreeRTOS, personalizado.
A maioria das estruturas do tipo xUnit fornecerá algum nível básico de funcionalidade que pode ser útil. Eu usei o Cunit com algum sucesso no passado. (pacote libcunit1-dev no Ubuntu / Debian). A maioria das estruturas exige que a libc esteja disponível, algumas exigem suporte adicional do sistema operacional.
Outra alternativa que tem apenas 3 linhas é a Minunit .
Descobri que o teste de unidade usando o microcontrolador como alvo é bastante complicado, pois você precisa apresentar um ambiente adequado para fazer o download de testes, executá-los e obter resultados novamente. Basta colocar a plataforma no lugar que permitirá fazer isso é uma grande tarefa.
Outra abordagem que tomei e que funcionou para mim é fazer testes de unidade no host, implementando uma camada de abstração entre os drivers e o código do aplicativo. Como você está usando o gcc para o destino, o código também deve ser compilado no host.
Testar no host de compilação geralmente é muito mais fácil, pois você tem o suporte completo do sistema operacional host e de todas as suas ferramentas. Por exemplo, ao testar no host, tenho uma versão zombada do meu driver sem fio com a mesma interface que o driver real que é executado no destino. A versão host usa pacotes UDP para simular a transferência de pacotes sem fio, com o driver simulado suportando a capacidade de descartar pacotes para que eu possa testar meus protocolos.
No produto em que estava trabalhando, um sistema operacional encadeado estava sendo usado; portanto, a camada de abstração para teste no sistema operacional host usava pthreads.
Embora não seja perfeito, quanto mais fácil você escrever e executar testes, maior a probabilidade de implementar mais casos de teste. Outro benefício de ter o código executado em plataformas diferentes é testar se o código é portátil. Você detectará rapidamente erros endian se as arquiteturas de destino e host diferirem.
Agora estou um pouco desconfortável, mas sinto que essas idéias podem ajudar na sua escolha de estrutura e métodos de teste.