A criação de testes para nossas aplicações é de fundamental importância. Metodologias como a do TDD, quando aplicadas corretamente diminuem em muito os bugs gerados, principalmente em manutenção do código, e tempo de debugger, além de garantir as funcionalidades de nosso código. Há algum tempo estava procurando algo para mim aplicar o TDD no desenvolvimento utilizando C, encontrei o libtap e como iniciei o desenvolvimento do meu trabalho de TCC(que se Deus quiser irá se tornar um mestrado) resolvi escrever um post sobre o TAP.
O que é TAP?
TAP (Test Anything Protocol) é um protocolo que permite a comunicação entre os testes unitários e os testes de aceitação. Ele foi desenvolvido originalmente para uso na linguagem Perl. Há diversas lib para várias linguagens que produzem o resultados dos testes no formato TAP. E também há diversos parses para o TAP.
Neste post quero focar na criação de testes em C utilizando a libtap. Por quê utilizar o TAP? Na aplicação que estou desenvolvendo é necessário o uso de três linguagens(C/C++ e Python), e quero manter um padrão para os meus testes. Além disso conheço bem a criação de testes em Perl e o libtap tenta se parecer muito com os Test::More do Perl.
Por exemplo:
Testes simples utilizando o Perl::More
use Test::More tests => 2;
$s = "uma string";
ok(2*3 eq 6,'2*3 = 6');
ok($s eq "uma string",'test string');
Testes simples utilizando o libtap
# include "tap.h"
int main(void) {
char s[] = "uma string";
plan_tests(2);
ok1(2*3 == 6);
ok1(!strcmp(s,"uma string"));
return exit_status();
}
A versão inicial do libtap para C foi descontinuada, porém há desenvolvedores mantendo um fork no seguinte endereço: http://www.shlomifish.org/open-source/projects/libtap/.
Para utiliza-lo é só copiar os arquivos tap.c e tap.h no diretório onde estão os testes e para compilar é o padrão de sempre:
gcc -c tap.c
gcc arquivo_com_testes.c -o executavel tap.o
Site Oficial do TAP - Wiki com informações importantes sobre TAP