+6

Testando suas classes com PHPUnit

criado por Alex Weber em 25/05/2009 6:01pm
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

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!"

Comentários:

Mostrando 1 - 8 de 8 comentários
O artigo esta ótimo e de fácil compreensão.
A dica do Alex também foi muito importante.

Parabéns a todos
05/05/2010 10:36am (~4 anos atrás)

Alex Weber disse:
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
10/03/2010 11:40am (~4 anos atrás)

Luis Ribeiro disse:
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.
10/03/2010 11:09am (~4 anos atrás)

Vlw, vou olhar a documentação! Maior adianto.
31/05/2009 9:45am (~4 anos atrás)

Alex Weber disse:
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
31/05/2009 12:08am (~4 anos atrás)

Alex Weber disse:
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
31/05/2009 12:08am (~4 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!
30/05/2009 11:59pm (~4 anos atrás)

Alex,

Ótimo artigo mostrando o PHPUnit! Espero que isso ajude a popularidade dessa ferramenta no Brasil.

--Joao
25/05/2009 7:49pm (~4 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)