você está aqui: Home → Coluna do Cesar Brod
De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Por Cesar Brod
Data de Publicação: 23 de Maio de 2014
Antes de partirmos para os testes unitários em PHP, que são o assunto desta parte do artigo, como foi a sua jornada até aqui? Você experimentou rodar o PHPCheckstyle, através da linha de comando, em seu programa PHP? Fez a checagem de estilo através da interface do NetBeans? Conseguiu resolver todos os problemas de estilo?
Se você não alterou as configurações padrão do NetBeans é bem provável que você esteja sofrendo com a mensagem "Whitespace indentation must not be used" (a indentação com espaços em branco não deve ser usada). Isto é porque o editor do NetBeans substitui as suas tabulações, convenientemente, só que não, por espaços em branco. Para corrigir isso, vá para Ferramentas > Opções > Editor e, na aba Formatação, em Linguagem selecione PHP, em Categoria selecione Tabulações e Recuos e desmarque as opções Utilizar Todas as Definições de Idiomas e Expandir Guias para Espaços. Em Número de Espaços por Recuo e Tamanho da Guia coloque o número 2. Deixe as outras opções inalteradas. Clique em Aplicar e Ok. Agora veja se consegue verificar o estilo de seu programa e eliminar os erros.
Dica: Com seu programa selecionado, experimente clicar no menu em Código-Fonte > Formatar ou pressionar, simultaneamente, as teclas Alt + Shift + F.
Veja como ficou o nosso programa:
<?php require 'calculadora.php'; /** * Essa classe testa as funções da classe Calculadora */ class TesteCalculadora extends PHPUnit_Framework_TestCase { /** * Instanciamos a Calculadora e verificamos se ela soma corretamente */ public function testeSoma() { $c = New Calculadora; $resultado = $c->soma(4, 3); $this->assertEquals(7, $resultado); }
Ainda há mais coisas a configurar no NetBeans, como você pode ter percebido. Cobriremos algumas delas nos novos artigos desta série.
O desenvolvimento baseado em testes, ou orientado a testes (Test Driven Development) é uma prática que visa, dentre outras coisas, diminuir a possibilidade de erros na codificação e uma melhor compreensão do código que terá que ser escrito. Antes de qualquer código funcional ser escrito, são definidos os testes pelos quais ele deve passar. Isso pode parecer uma inversão lógica nas fases da programação mas, na prática, os resultados são um código mais limpo e menos sujeito a erros.
A melhor forma de entender essa prática do Extreme Programming é colocando mãos à obra com um exemplo simples: uma calculadora escrita em PHP (exemplo baseado nos vídeos disponibilizados pelo Tuts+ Code).
Você precisará ter o php5 instalado em sua máquina, assim como um ambiente que permita testes unitários (testes que cobrem cada uma das classes de seu programa, seus atributos e métodos). Se você trabalhar em um ambiente Linux, siga a receita a seguir:
sudo apt-get install php5-cli curl php5-json
Se você já fez isso durante a leitura do artigo anterior, não precisa repetir o processo.
Os comandos acima instalam a interface de linha de comando para o php5, a ferramenta de recuperação de dados a partir da web curl e o JSON, um formato padrão para o intercâmbio de dados (Javascript Object Notation).
curl -s http://getcomposer.org/installer | php
Esse comando busca o instalador do composer, um gerenciador de dependências para o php e efetivamente o instala, através do direcionamento ao interpretador da linguagem ( | php ). Entenda o composer como um auxiliar no encontro e utilização de bibliotecas e componentes que podem ser necessários ao desenvolvimento de um determinado programa.
Para testar se a instalação foi concluída sem problemas, execute o comando a seguir:
php composer.phar
Uma lista de opções e argumentos que podem ser passados ao composer será exibida.
Agora, é preciso criar um arquivo json que informará ao composer as ferramentas para testes que utilizaremos. Crie um arquivo chamado composer.json com o seguinte conteúdo:
{ "require": { "eher/phpunit": "1.6" } }
Nota: para mais informações sobre os pacotes que podem ser instalados com o composer, visite a página https://packagist.org. Informações específicas sobre o eher/phpunit estão disponíveis nesse link.
O composer.json informa quais os pacotes devem ser instalados pelo composer. Para que a instalação se complete, você deve rodar o comando a seguir:
php composer.phar install
Se você não obtiver nenhuma mensagem de erro, seu ambiente de testes está configurado.
Comecemos por um exemplo bem simples, uma calculadora básica em PHP. Como você criaria os testes para a calculadora para a qual você ainda não escreveu nenhuma linha de código?
Por uma questão de organização, crie uma pasta chamada testes:
mkdir testes
Dentro dela, crie um programa em php chamado teste_calculadora.php, com o seguinte conteúdo:
<?php class TesteCalculadora extends PHPUnit_Framework_TestCase { public function testeSoma() { $c = New Calculadora; $resultado = $c->soma(4, 3); $this->assertEquals(7, $resultado); } }
O programa acima, por enquanto, esperará poder instanciar uma classe Calculadora e usá-la para testar a soma dos números 4 e 3, cujo resultado esperado é 7. Mesmo que você não conheça muito da linguagem PHP ou de orientação a objetos, basta saber que estamos estendendo (criando uma nova classe que herda os atributos e métodos de uma classe original) uma classe chamada PHPUnit_Framework_TestCase, interna ao ambiente de testes PHPUnit e chamada de TesteCalculadora. A função testeSoma é a que, efetivamente, instanciará (utilizará) a classe Calculadora e passará a ela dois números para que sejam somados.
Nota: caso você tenha que fazer alguma modificação em seu arquivo de configuração do php (php.ini), descubra qual é o arquivo apropriado com o comando:
php -i |grep php\.ini
Vamos, agora, rodar o nosso teste da função soma para a nossa calculadora. Como ela nem existe ainda, o teste, obviamente, deve falhar. O composer instalou o phpunit dentro de uma pasta /vendor/eher/phpunit/bin - relativa ao local onde você rodou o instalador. Se você seguiu as instruções exatamente como estão aqui, esta pasta está dentro de sua pasta de usuário. Certifique-se de que os locais onde você instalou correspondem aos exemplos, ou faça a adequação necessária no comando a seguir:
vendor/eher/phpunit/bin/phpunit testes/teste_calculadora.php
O erro que você obteve deve ser bastante parecido com o seguinte:
PHP Fatal error: Class 'Calculadora' not found in /home/user/testes/teste_calculadora.php on line 7
A partir desse teste, então, começamos a corrigir os problemas.
Primeiro, notificaremos nosso teste que a classe Calculadora estará no programa calculadora.php, acrescentando a linha em negrito ao programa teste_calculadora.php:
<?php require 'calculadora.php'; class TesteCalculadora extends PHPUnit_Framework_TestCase { public function testeSoma() { $c = New Calculadora; $resultado = $c->soma(4, 3); $this->assertEquals(7, $resultado); } }
O programa calculadora.php não existe, assim ele também precisa ser criado. Crie-o com o seguinte conteúdo:
<?php class Calculadora { }
Ou seja, criamos apenas a classe que causou o erro. Mais nada! Lembre-se que, no Extreme Programming, apenas resolvemos um problema quando ele aparece. Verifique o estilo do programa recentemente criado (você já sabe como fazer isso), aproveite para corrigi-lo adequadamente, e rode novamente o teste:
vendor/eher/phpunit/bin/phpunit testes/teste_calculadora.php
Como era de se esperar, o método soma ainda não existe e o teste acusa isso através do seguinte erro:
PHP Fatal error: Call to undefined method Calculadora::soma() in /var/home/brod/testes/teste_calculadora.php on line 10
Vamos corrigir mais esse problema, acrescentando o método à classe Calculadora no programa calculadora.php, editando-o para que corresponda ao seguinte:
<?php class Calculadora { public function soma($a, $b) { return $a + $b; } }
Agora temos a classe Calculadora e o método soma que, se construído apropriadamente, não deve retornar mais nenhum erro. Confira!
vendor/eher/phpunit/bin/phpunit testes/teste_calculadora.php
Que tal, como exercício, criar as funções de teste de subtração, multiplicação e divisão e seguir desenvolvendo a calculadora e trabalhando com um par, como recomenda a metodologia Extreme Programming?
Na próxima semana, veremos como implementar os testes unitários dentro do IDE NetBeans.
Resenha: O maior desafio desta obra é tornar-se um livro de cabeceira e referência simultaneamente. A expectativa do autor é a de que os leitores o leiam de cabo a rabo e, ao final, o guardem na biblioteca pública de sua preferência para que ele esteja ao seu alcance e ao alcance de todos os demais que, por qualquer razão, não pagaram por ele.
O livro não discute se o Scrum é um processo de engenharia, um método ágil ou um conjunto de ferramentas. O Scrum é uma atitude. Aqui você encontrará histórias sobre o Scrum e métodos ágeis, começando por suas origens, suas aplicações, sempre ilustrando com casos práticos de uso. Várias referências serão apontadas (algumas escritas pelo próprio autor, outras em parceria com Joice Käfer), muitas mais ou menos acadêmicas, para enriquecer a experiência do leitor, mas apenas como acessórios à leitura deste livro.
Em resumo, aqui você encontrará história, contextualização, aplicação, método e documentação. Não espere encontrar burocracia, chatice e opressão. Todo método deve ser divertido. Qualquer livro deve ser prazeroso. Temos plena consciência dos excelentes competidores na prateleira a seu lado, atraindo sua visão.
Cesar Brod usa Linux desde antes do kernel atingir a versão 1.0. Dissemina o uso (e usa) métodos ágeis antes deles ganharem esse nome. Ainda assim, não está extinto! Escritor, consultor, pai e avô, tem como seu princípio fundamental a liberdade ampla, total e irrestrita, em especial a do conhecimento.
Mais sobre o Cesar Brod: [ Linkedin ] | [ Twitter ] | [ Tumblr ].