Testando suas classes com PHPUnit
O que é Unit Testing?
- Testes para pequenos trechos de código (unidades)
- Verifica se o comportamento de classes e funções é o esperado
- Caso erros são encontrados exceções são lançadas
- Não interfere com o seu código-fonte
Qual a vantagem?
- Os testes são automatizados
- Eles são executados continuamente durante o ciclo de desenvolvimento
- Detectam falhas tanto de digitação e lógica e também comportamentos inesperados
Exemplo
Apesar do exemplo simples, ilutra uma prática bem comum: a de inserir vários echo() e print() para confirmar o funcionamento de uma classe ou função.
O PHPUnit é uma framework que tem como objetivo automatizar e padronizar a forma como nosso código é testado.
"Whenever you are tempted to type something into a print statement or a debugger expression, write it as a test instead." -- Martin Fowler
Ou seja: "Toda vez que sentir vontade de escrever um print ou outra expressão de debug, pare e crie um teste!"
- Testes para pequenos trechos de código (unidades)
- Verifica se o comportamento de classes e funções é o esperado
- Caso erros são encontrados exceções são lançadas
- Não interfere com o seu código-fonte
Qual a vantagem?
- Os testes são automatizados
- Eles são executados continuamente durante o ciclo de desenvolvimento
- Detectam falhas tanto de digitação e lógica e também comportamentos inesperados
Exemplo
class Classe1 { public function somar($a, $b) { return $a+$b; } public function subtrair($a, $b) { return $a-$b; } } // Teste da classe $foo = new Classe1(); $soma = $foo->somar(2, 2); $subracao = $foo->subtrair(2, 2); echo '2 mais 2 = ' . $soma; echo '2 menos 2 = ' . $subtracao; // Funciona conforme esperado!
Apesar do exemplo simples, ilutra uma prática bem comum: a de inserir vários echo() e print() para confirmar o funcionamento de uma classe ou função.
O PHPUnit é uma framework que tem como objetivo automatizar e padronizar a forma como nosso código é testado.
"Whenever you are tempted to type something into a print statement or a debugger expression, write it as a test instead." -- Martin Fowler
Ou seja: "Toda vez que sentir vontade de escrever um print ou outra expressão de debug, pare e crie um teste!"
Luis,
Partindo do pressuposto que o phpunit está instalado corretamente no windows eu verificaria que o executável do phpunit está no seu PATH das suas variáveis de ambiente do windows e também que o eclipse esteja corretamente configurado.
Infelizmente não uso nem Eclipse e nem Windows para poder oferecer alguma sugestão menos genérica!
Abs,
Alex
Partindo do pressuposto que o phpunit está instalado corretamente no windows eu verificaria que o executável do phpunit está no seu PATH das suas variáveis de ambiente do windows e também que o eclipse esteja corretamente configurado.
Infelizmente não uso nem Eclipse e nem Windows para poder oferecer alguma sugestão menos genérica!
Abs,
Alex
10/03/2010 11:40am
(~14 anos atrás)
Bacana o artigo!!
Gostaria de aproveitar e tirar uma dúvida.
Utilizo o Eclipse para desenvolver PHP. Trabalho em ambiente Windows, porém o servidor do PHP é linux.
Instalei o PHP unit e pela linha de código funciona normalmente.
O problema é quando tento integrar com Eclipse. O arquivo do phpunit não roda, porque não é um programa de windows; mas eu preciso fazer os testes no ambiente em que minha aplicação roda.
Gostaria de aproveitar e tirar uma dúvida.
Utilizo o Eclipse para desenvolver PHP. Trabalho em ambiente Windows, porém o servidor do PHP é linux.
Instalei o PHP unit e pela linha de código funciona normalmente.
O problema é quando tento integrar com Eclipse. O arquivo do phpunit não roda, porque não é um programa de windows; mas eu preciso fazer os testes no ambiente em que minha aplicação roda.
10/03/2010 11:09am
(~14 anos atrás)
Fabiano,
Existe sim! É uma ferramenta do próprio PHPUnit que gera "esqueletos" de testes, ou seja, ele cria a classe de teste e um teste vazio para todos os métodos. Daí você só tem o trabalho de especificar afirmações a serem testadas para cada método e preencher os valores (ou definir um @dataProvider).
No caso, para criar uma classe de testes esqueleto para a sua classe "Foo", execute o seguinte comando no terminal/prompt de commando: "phpunit --skeleton Foo" e pronto!
A documentação está toda em inglês mas explica isto em mais detalhes:
http://www.phpunit.de/manual/3.4/en/skeleton-generator.html
Abs!
Alex
Existe sim! É uma ferramenta do próprio PHPUnit que gera "esqueletos" de testes, ou seja, ele cria a classe de teste e um teste vazio para todos os métodos. Daí você só tem o trabalho de especificar afirmações a serem testadas para cada método e preencher os valores (ou definir um @dataProvider).
No caso, para criar uma classe de testes esqueleto para a sua classe "Foo", execute o seguinte comando no terminal/prompt de commando: "phpunit --skeleton Foo" e pronto!
A documentação está toda em inglês mas explica isto em mais detalhes:
http://www.phpunit.de/manual/3.4/en/skeleton-generator.html
Abs!
Alex
31/05/2009 12:08am
(~15 anos atrás)
Fabiano,
Existe sim! É uma ferramenta do próprio PHPUnit que gera "esqueletos" de testes, ou seja, ele cria a classe de teste e um teste vazio para todos os métodos. Daí você só tem o trabalho de especificar afirmações a serem testadas para cada método e preencher os valores (ou definir um @dataProvider).
No caso, para criar uma classe de testes esqueleto para a sua classe "Foo", execute o seguinte comando no terminal/prompt de commando: "phpunit --skeleton Foo" e pronto!
A documentação está toda em inglês mas explica isto em mais detalhes:
http://www.phpunit.de/manual/3.4/en/skeleton-generator.html
Abs!
Alex
Existe sim! É uma ferramenta do próprio PHPUnit que gera "esqueletos" de testes, ou seja, ele cria a classe de teste e um teste vazio para todos os métodos. Daí você só tem o trabalho de especificar afirmações a serem testadas para cada método e preencher os valores (ou definir um @dataProvider).
No caso, para criar uma classe de testes esqueleto para a sua classe "Foo", execute o seguinte comando no terminal/prompt de commando: "phpunit --skeleton Foo" e pronto!
A documentação está toda em inglês mas explica isto em mais detalhes:
http://www.phpunit.de/manual/3.4/en/skeleton-generator.html
Abs!
Alex
31/05/2009 12:08am
(~15 anos atrás)
Legal!
Existe algum gerador de classe de teste? Vc aponta qual classe quer testar, digita os parâmetros e pronto! rs.
vlw!
Existe algum gerador de classe de teste? Vc aponta qual classe quer testar, digita os parâmetros e pronto! rs.
vlw!
30/05/2009 11:59pm
(~15 anos atrás)
Alex,
Ótimo artigo mostrando o PHPUnit! Espero que isso ajude a popularidade dessa ferramenta no Brasil.
--Joao
Ótimo artigo mostrando o PHPUnit! Espero que isso ajude a popularidade dessa ferramenta no Brasil.
--Joao
25/05/2009 7:49pm
(~15 anos atrás)
A dica do Alex também foi muito importante.
Parabéns a todos