Configuração e Utilização do Cmocka para Testes Unitários em C

1. Introdução

Este artigo aborda a configuração do framework Cmocka para testes unitários em ambientes Windows e apresenta como utilizá-lo para criar testes automatizados em linguage C. ### 2. Visão Geral do Cmocka

O Cmocka constitui um framework de testes unitários para linguagem C que oferece suporte a objetos mock (stubs). Esta biblioteca utiliza exclusivamente a biblioteca padrão C e pode ser executada em diversas plataformas de computação, icnluindo sistemas embarcados, além de ser compatível com diferentes compiladores. O Cmocka fornece os seguintes recursos: - Ejecutor de Testes - Função principal para execução de toda a suíte de testes

  • Asserções Padrão - Substituição para assertions convencionais, evitando interrupções prematuras nos testes
  • Verificação de Parâmetros - Mecanismo para validação de argumentos passados às funções
  • Objetos Mock - Implementação de mocks para funções, permitindo simular retornos de funções externas
  • Alocação Dinâmica de Memória - Detecção de vazamentos de memória durante a execução dos testes
  • Macros de Asserção - Coleção de macros úteis para diferentes tipos de verificações

3. Instalação das Ferramentas de Desenvolvimento

O MSYS2 (Minimal SYStem 2) representa uma coleção de pacotes de código aberto que integra diversas ferramentas GNU, utilidades e bibliotecas. Este ambiente oferece um shell semelhante ao Linux, permitindo compilar e executar aplicações Linux no sistema Windows. O MSYS2 fundamenta-se na plataforma MinGW-w64 e fornece um ambiente de desenvolvimento completo, incluindo o compilador GCC, depurador GDB, Make, Git e muitas outras ferramentas. Além das bibliotecas convencionais, o MSYS2 oferece bibliotecas específicas para a plataforma Windows, facilitando o desenvolvimento cruzado. Recomenda-se instalar o MSYS2 e o conjunto de ferramentas GCC correspondente ao subsistema MinGW64, que compreende o compilador gcc, depurador gdb, make, git e outras utilidades necessárias para o desenvolvimento. ### 4. Instalação do Cmocka

Existem duas abordagens para obter o Cmocka: compilação a partir do código-fonte ou instalação direta via gerenciador de pacotes. Em ambientes Windows, a instalação direta é mais recomandada devido a problemas de localização de bibliotecas que podem ocorrer com a compilação manual. Em ambientes Linux, ambas as approaches funcionam adequadamente. #### 4.1. Compilação a Partir do Código-Fonte

O código-fonte pode ser obtido no site oficial https://cmocka.org/. Para ambientes Linux, execute os seguintes comandos no terminal: ``` tar -xvJf cmocka-1.1.3.tar.xz cd cmocka-1.1.3 mkdir build cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug .. make sudo make install


Para ambientes Windows, utilize o MinGW Makefiles: ```
cd cmocka
cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug
cmake --build build
cmake --install build

4.2. Instalação Direta via Pacotes

O MSYS2 oferece o Cmocka em seu repositório de pacotes. Acesse https://packages.msys2.org/base/mingw-w64-cmocka e escolha o pacote correspondente ao subsistema MinGW64. No terminal, execute: ``` pacman -S mingw-w64-x86_64-cmocka


Após a instalação, os arquivos de cabeçalho e bibliotecas estarão disponíveis nos diretórios include do MinGW64. ### 5. Utilização Prática do Cmocka

Para demonstrar a utilização do framework, utilizaremos o exemplo calculator disponível no diretório example do código-fonte do Cmocka. A estrutura do projeto contém os seguintes arquivos: ```
└── cmocka-1.1.3     
    ├── example    
    │   ├── allocate_module.c  
    │   ├── allocate_module_test.c  
    │   ├── assert_macro.c    
    │   ├── assert_macro.h  
    │   ├── assert_macro_test.c  
    │   ├── assert_module.c  
    │   ├── assert_module.h  
    │   ├── assert_module_test.c  
    │   ├── calculator.c  
    │   ├── calculator.h  
    │   ├── calculator_test.c  
    │   └── simple_test.c  
    └── testes

Para compilar e executar os testes, navegue até o diretório example e execute: ``` cd example gcc -o calculadora calculadora_test.c -lcmocka ./calculadora


Na implementação prática, recomenda-se modificar o código-fonte do módulo para suportar os testes unitários, criando funções que retornam valores específicos para os diferentes cenários de teste. O resultado da execução presentará a quantidade de testes executados, mostrando quantos passaram e quantos falharam. ### 6. Análise de Cobertura de Código

Para verificar a cobertura de código dos testes, utilizaremos as ferramentas gcov e lcov. Primeiramente, crie um diretório para análise dentro do diretório example: ```
mkdir cobertura
cd cobertura
gcc -coverage -O0 -o calculadora_test ../calculadora_test.c -lcmocka
gcov ../calculadora_test.c -o .

Em seguida, colete os dados de cobertura e gere o relatório HTML: ``` lcov -d . -t calculadora -o calculadora.info -b . -c genhtml -o saida calculadora.info


Caso o comando lcov não esteja disponível, instale-o através do pacman: ```
pacman -S lcov

Para visualizar o relatório, abra o arquivo index.html gerado no diretório saida utilizando um navegador web. Este relatório apresenta detalhadamente quais linhas de código foram executadas durante os testes e quais precisam de cobertura adicional.

Tags: cmocka testes-unitarios C Windows msys2

Publicado em 7-19 13:22