+6

Testando suas classes com PHPUnit

criado por Alex Weber em 25/05/2009 6:01pm
Uma versão um pouco mais complicada para explicar o uso do data provider em testes:

// 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

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