Testando suas classes com PHPUnit
Instalação do PHPUnit
Quem usa o linux pode fazer facilmente:
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:
Vamos ver alguns exemplos na próxima página.
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.
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