Realizar testes automáticos de diversas partes do seu software é uma prática que vem ganhando bastante reconhecimento últimamente juntamente com o paradigma da programação orientada a teste (Test Driven Development). A técnica do TDD “formalizada” no excelente livro de Kent Beck (recomendadíssimo) deu seus primeiros passos no Java com o framework JUnit e rapidamente foi sendo incorporada em outras linguagens.
O que me leva a um ponto importante. Eu faço muitos poucos testes nos meus softwares e embora isto se deva em parte pela preguiça e pela falta de prática eu gosto de creditar isto também a não conhecer nenhum bom framework de testes para C/C++ que acabam sendo minhas linguagens escolhidas para fazer diversos projetos.
Ok, shame on me.
Existem vários e eu resolvi tentar pegar um e usar. À primeira vista eu tentei o Cutest mas achei ele meio complicado demais e muito cheio de firulas, tinha que suar muito só pra começar a escrever algumas coisinhas simples. Depois de dar uma fuçada e conversar com algum pessoal que também estava interessado no assunto eu cheguei num chamado simplectest e gostei bastante.
Simplicidade no talo
Um programador, um editor de texto e um arquivo header. É tudo que você precisa para começar a fazer seus testes com o simplectest. Um exemplo de um programa simples seria
//arquivo hello.c
#include "tests.h"
START_TESTS()
//nosso hello world
START_TEST("Testa 1 == 1")
ASSERT(1 == 1)
END_TEST()
END_TESTS()
E rodando este teste temos o seguinte output
> Testa 1 == 1...
--- Results ---
Tests run: 1
Passes: 1
Failures: 0
Uma explicação rápida
Esta biblioteca é baseada fortemente sobre a construção de alguns macros do pré-processador, coisa que alguns mais experientes em C poderiam achar meio tensa. Entretanto eu simpatizei, porque afinal de contas este código não vai estar misturado com a sua aplição, seus testes rodam num mundinho separado.
Algumas instruções rápidas para começar.
- Colocamos os nossos testes entre as chamadas
START_TESTS()
eEND_TESTS()
. - Cada teste deve ser declarado com
START_TEST( "string descrevendo o que o teste faz" )
(note que este está no singular) e deve ser fechado comEND_TEST()
. - Escreva dentro a lógica do teste . Temos à disposição uma gama bem variada de
ASSERTs
, porém na maior parte das vezes dá pra ficar com o clássicoASSERT(exp)
que irá falhar casoexp
avalie para falso. - Para descobrir os asserts disponíveis dê uma lida no .h, não tem treta pessoal
Exemplo completo de FizzBuzz e mais instruções
Fiquei com preguiça de copiar tudo pra cá então vocês podem encontrar nesta página aqui que é a minha wiki.
Pingback: Dojo-UFRGS 15/9 « DoJoPoA