Testando suas classes com PHPUnit
O test seguinte usa a função assertEquals() para checar o retorno de um método:
Outro teste simples que retorna o seguinte:
Ou seja, quando um teste falha ele informa o arquivo e linha onde ocorreu o erro.
Explica também qual foi o erro:
- O valor esperado era "Ola Alex"
- O valor retornado foi "Ola ciclano"
E ele ainda mostra a diferença ( xxxx???)
Fornecendo valores para os testes
- As vezes não basta só um teste com um valor estático
- Podemos criar uma função para alimentar o teste usando vários valores (e nada impede que sejam de fontes externas)
- A função é identificada através da anotação @dataProvider no DocBlock
Exemplo:
// Especifique o caminho do PHPUnit require_once '/usr/share/php/PHPUnit/Framework.php'; // Especifique o caminho da classe a ser testada require_once 'Classe2.php'; class Classe2Test extends PHPUnit_Framework_TestCase { public function testCumprimentarSemParametro() { // O comportamento esperado é que retorne "Olá fulano", testa esta afirmação $this->assertEquals('Olá fulano', $foo->cumprimentar()); } public function testCumprimentarComParametro() { // Instancia a classe e passa "Alex" ao construtor $foo = new Classe2('Alex'); // O comportamento esperado é que retorne "Olá Alex", testa esta afirmação $this->assertEquals('Olá Alex', $foo->cumprimentar()); } // Funções de teste também podem ser identificados pela anotação @test no DocBlock /** * @test */ public function vaiDarErrado() { // Instancia a classe e passa "ciclano" ao construtor $foo = new Classe2('ciclano'); // O comportamento esperado é que retorne "Olá ciclano", mas vamos afirmar que retornará outro valor para forçar um erro $this->assertEquals('Olá Alex', $foo->cumprimentar()); } }
Outro teste simples que retorna o seguinte:
PHPUnit 3.3.16 by Sebastian Bergmann. ..F Time: 0 seconds There was 1 failure: 1) vaiDarErrado(Classe2Test) Failed asserting that two strings are equal. expected string <Olá Alex> difference < xxxx???> got string <Olá ciclano> /caminho/para/o/arquivo/Classe2Test.php:35 FAILURES! Tests: 3, Assertions: 3, Failures: 1.
Ou seja, quando um teste falha ele informa o arquivo e linha onde ocorreu o erro.
Explica também qual foi o erro:
- O valor esperado era "Ola Alex"
- O valor retornado foi "Ola ciclano"
E ele ainda mostra a diferença ( xxxx???)
Fornecendo valores para os testes
- As vezes não basta só um teste com um valor estático
- Podemos criar uma função para alimentar o teste usando vários valores (e nada impede que sejam de fontes externas)
- A função é identificada através da anotação @dataProvider no DocBlock
Exemplo:
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