Estou pensando em como posso usar testes de unidade no meu projeto de mcu e quais estruturas posso usar para simplificá-lo.
Hoje estou usando um stm32 com OpenOCD-jtag de um PC Linux, onde tudo é controlado a partir de um Makefile clássico e compilado com o gcc.
Eu mesmo poderia criar algo, mas se houver uma estrutura que eu possa usar, seria bom. (É um bônus se a estrutura puder gerar o resultado em um formato que Jenkins / Hudson possa ler).
Existe uma maneira de usar uma estrutura de teste de unidade com um stm32?
Respostas:
Confira o CppUTest e o excelente http://pragprog.com/book/jgade/test-driven-development-for-embedded-c de James Grenning
O CppUTest tem suporte para C e C ++, e possui um bom conjunto de modelos Makefile que me iniciaram rapidamente.
fonte
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:
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.
fonte
Confira embUnit http://embunit.sourceforge.net/embunit/index.html . É uma estrutura de teste de unidade C incorporada com uma pegada baixa.
Nós o usamos com sucesso em alguns projetos de microcontroladores incorporados. Não espere as opções e os recursos que você obtém com uma estrutura de teste de unidade de desktop. Mas é definitivamente poderoso o suficiente.
Ele tem alocações de declarações definidas para você, para que você não precise perder muito tempo escrevendo declarações personalizadas como com minUnit.
fonte
Há algum tempo, escrevi um tutorial completo sobre o tópico: Teste de unidade (embutida) de aplicativos C com Ceedling ; Eu uso essas técnicas em vários projetos e estou muito feliz até agora.
fonte
Eu estava apenas investigando isso. Encontrei um artigo de três partes que descreve uma estrutura de teste de unidade aqui:
http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools
Eu também concordo com tudo o que Austin mencionou.
fonte
Tente o fiapo, mas não acho que seja para teste de unidade, é para análise de código.
fonte