Classe Unit Testing
Unit testing, ou Teste Unitário, é uma abordagem em desenvolvimento de software na qual testes são escritos para cada função em sua aplicação. Se você não está familiarizado com este conceito, poderia fazer uma busca rápida sobre o assunto.
A classe Unit Testing do Code Igniter é bem simples, consistindo de uma função de avaliação e duas de resultado. Ela não tem a intenção de ser uma suite de testes gigante mas sim um simples mecanismo de avaliar seu código para determinar se ele está produzindo os corretos tipos de dados e resultados.
Inicializando a Classe
Como a maioria das classes no Code Igniter, esta classe é inicializada, em seu controller, usando a função $this->load->library:
$this->load->library('unit_test');
Uma vez carregada, seu objeto estará disponível usando: $this->unit
Rodando Testes
Rodar um teste envolve fornecer um teste e o resultado esperado à seguinte função:
$this->unit->run( teste, resultado esperado, 'nome do teste' );
Onde teste é o resultado do seu código que você deseja testar, resultado esperado é o tipo de dado que você espera, e nome do teste é um nome opcional que você pode dar ao seu teste. Exemplo:
$teste = 1 + 1;
$resultado_esperado = 2;
$nome_do_teste = 'Somar um mais um';
$this->unit->run($teste, $resultado_esperado, $nome_do_teste);
O resultado esperado fornecido por você pode ser uma comparação ligeral, ou uma comparação de tipos de dados. Aqui vai um exemplo de uma literal:
$this->unit->run('Foo', 'Foo');
Aqui vai um exemplo de uma comparação de tipos de dados:
$this->unit->run('Foo', 'is_string');
Notou o uso do "is_string" no segundo parâmetro? Isto diz à função para avaliar se seu teste está produzindo uma string como resultado. Aqui vai uma lista de tipos permitidos de comparações:
- is_string
- is_bool
- is_true
- is_false
- is_int
- is_numeric
- is_float
- is_double
- is_array
- is_null
Gerando relatórios
Você pode tanto mostrar resultados após cada teste, ou pode rodar vários testes e gerar um relatório no final. Para mostrar um relatório diretamente, simplesmente dê um echo ou retorne a função run:
echo $this->unit->run($teste, $resultado_esperado);
Para rodar um relatório completo de todos os testes, use isto:
echo $this->unit->report();
O relatório será formatado em uma tabela HTML para visualização. Se você preferir os dados crus, pode recuperar um array usando:
echo $this->unit->result();
Modo Estrito
Por default, a classe unit test avalia comparações literais de forma pouco rigorosa. Considere este exemplo:
$this->unit->run(1, TRUE);
O teste irá avaliar um inteiro, mas o resultado esperaro é booleano. O PHP, no entando, devido a seus tipos-de-dados genéricos, irá avaliar o código acima como VERDADEIRO, usando um teste de igualdade normal:
if (1 == TRUE) echo 'Isto é avaliando como VERDADEIRO';
Se você preferir, pode colocar a classe unit test em modo estrito, no qual ela irá comprar os tipos de dados assim como os valores:
if (1 === TRUE) echo 'Isto é avaliando como FALSO';
Para habilitar o modo estrito, use isto:
$this->unit->use_strict(TRUE);
Habilitando/Desabilitando o Unit Testing
Se você quiser manter alguns testes dentro de seus scripts, mas não quer rodá-los a menos que precise, pode desabilitar o unit testing usando:
$this->unit->active(FALSE)
Criando um Template
Se você quiser seus resultados de testes formatados de forma diferente da padrão, pode montar seu próprio template. Aqui vai um exemplo de um simples template. Note as pseudo-variáveis exigidas:
$str = '
<table border="0" cellpadding="4" cellspacing="1">
{rows}
<tr>
<td>{item}</td>
<td>{result}</td>
</tr>
{/rows}
</table>';
$this->unit->set_template($str);
Nota: O seu template deve estar declarado antes de rodar o processo de unit testing.