+6

Testando suas classes com PHPUnit

criado por Alex Weber em 25/05/2009 6:01pm
Instalação do PHPUnit

Quem usa o linux pode fazer facilmente:
# se não tiver o PEAR instalado
apt-get install pear
# descubra o canal do PHPUnit
pear channel-discover pear.phpunit.de
# instale o phpunit
pear install phpunit/PHPUnit

# Ele fica instalado por padrão no /usr/share/php/PHPUnit
# Agora é só incluir o framework nos arquivos de teste e começar!

Quem usa windows procure no google! Não deve ser muito complicado... (se não me engano ele já vem incluso no pacote XAMPP)

Guia para criar Unit Tests

- Os testes para a classe "Classe1" (Classe1.php) deverão ser localizados dentro da classe "Classe1Test" (Classe1Test.php), sempre use o sufixo "Test" (NomeDaClasseTest)
- Na maioria dos casos a classe de teste irá herdar (extends) da classe PHPUnit_Framework_TestCase
- Os testes deverão ser funções públicas com o prefixo "test" (testSomar, testSubtrair, etc)
- Os testes são baseados em afirmações, ou seja: afirmamos que o resultado esperado da função X é Y, e testamos a afirmação pra ver se ela procede.
- Usamos funções como assertEquals() para testar afirmações (exemplos a seguir)

Algumas Afirmações disponíveis (Funções de Teste)

- Existem dezenas (veja a documentação http://www.phpunit.de/manual/), seguem algumas das mais comuns:
- assertEquals($valor, funcao()) (afirma que o valor retornado da funcao é igual a $valor)
- assertNotEquals($valor, funcao()) (afirma que o valor retornado da funcao não é igual a $valor)
- assertSame($valor, funcao()) (testa se o objeto retornado é igual a $valor)
- assertTrue(funcao()) (afirma que o valor retornado é === true)
- assertFalse(funcao()) (=== false)
- setExpectedException (avisa sobre uma exceção que deverá ser lançada)

Como rodar os testes

Através do terminal (ou prompt de comando), no diretório do arquivo de teste digite:

phpunit NomeDaClasseTest
# para rodar os testes contidos no arquivo NomeDaClasseTest.php

Vamos ver alguns exemplos na próxima página.

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.)