Testando suas classes com PHPUnit
Uma versão um pouco mais complicada para explicar o uso do data provider em testes:
Valor retornado:
Resumindo...
- O assunto é bastante extenso e realmente fica difícil cobrir todas as possibilidades (que são quase infinitas)
- É possível criar testes para testar se Exceções são lançadas conforme esperado, para testar classes de acesso ao banco de dados e muito mais
- O ideal seria implementar isto em uma aplicação que esteja desenvolvendo, ou seja, crie uma pasta para os testes e vá criando testes para as suas classes nela
Todo o código-fonte para os exemplos e outros exemplos mais complexos (todos bem documentados) estão disponíveis:
ADMINS: se possível armazene aqui, senão pode ficar no meu URL mesmo...
http://www.alexweber.com.br/exemplos_phpunit.zip
Espero que tenham gostado e que eu tenha introduzido bem este assunto que é frequentemente subestimado e importantíssimo quande se trata de desenvolvimento.
Se alguém tiver alguma crítica, dúvida, sugestão por favor comente!
Abraços,
Alex
// Demonstração de "Data Providers" class Classe3Test extends PHPUnit_Framework_TestCase { // Informa o nome do forneçedor de dados (@dataProvider) para a clase de teste /** * @dataProvider provider */ // Recebe 3 parâmetros public function testCombine($a, $b, $c) { // Afirma que o valor do terceiro parâmetro é igual a concatenação dos primeiros dois separados por um espaço $this->assertEquals($c, $a . ' ' . $b); } // A função fornecedora de valores public function provider() { // retorna um array contendo 3 grupos de valores a serem testados return array( array('Hello', 'World', 'Hello World'), array('É', 'Nois', 'É Nois'), array('Deu', 'Errado', 'Deu Certo') ); } }
Valor retornado:
PHPUnit 3.3.16 by Sebastian Bergmann. ..F Time: 0 seconds There was 1 failure: 1) testCombine(Classe3Test) with data set #2 ('Deu', 'Errado', 'Deu Certo') Failed asserting that two strings are equal. expected string <Deu Certo> difference < xxxxx?> got string <Deu Errado> /home/alex/Documents/aw/Articles/PHPUnit/Classe3Test.php:16 FAILURES! Tests: 3, Assertions: 3, Failures: 1.
Resumindo...
- O assunto é bastante extenso e realmente fica difícil cobrir todas as possibilidades (que são quase infinitas)
- É possível criar testes para testar se Exceções são lançadas conforme esperado, para testar classes de acesso ao banco de dados e muito mais
- O ideal seria implementar isto em uma aplicação que esteja desenvolvendo, ou seja, crie uma pasta para os testes e vá criando testes para as suas classes nela
Todo o código-fonte para os exemplos e outros exemplos mais complexos (todos bem documentados) estão disponíveis:
ADMINS: se possível armazene aqui, senão pode ficar no meu URL mesmo...
http://www.alexweber.com.br/exemplos_phpunit.zip
Espero que tenham gostado e que eu tenha introduzido bem este assunto que é frequentemente subestimado e importantíssimo quande se trata de desenvolvimento.
Se alguém tiver alguma crítica, dúvida, sugestão por favor comente!
Abraços,
Alex
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