Capítulo 1. Instalando o PHPUnit

Existem três formas suportadas de instalar o PHPUnit. Você pode usar o Instalador PEAR Installer ou Composer para baixar e instalar o PHPUnit assim como suas dependências. Você também pode baixar um PHP Archive (PHAR) do PHPUnit que tem todas as dependências exigidas (assim como algumas opcionais) do PHPUnit em um único arquivo.

Nota

O suporte ao Composer e PHP Archive (PHAR) foi adicionado no PHPUnit 3.7 (tido como estável desde o PHPUnit 3.7.5). Versões anteriores do PHPUnit não estão disponíveis através desses canais de distribuição.

Nota

O PHPUnit 3.7 exige PHP 5.3.3 (ou superior) mas PHP 5.4.7 (ou superior) é altamente recomendável.

A biblioteca PHP_CodeCoverage que é usada pelo PHPUnit para coletar e processar a informação de cobertura de código, depende do Xdebug 2.0.5 (ou superior) mas o Xdebug 2.2.0 (ou superior) é altamente recomendável.

PEAR

Os dois comandos seguintes (que talvez você tenha que executar como root) são todo o necessário para instalar o PHPUnit usando o Instalador PEAR:

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit

Cuidado

Dependendo da distribuição do seu Sistema Operacional e/ou seu ambiente PHP, você pode ter que instalar o PEAR ou atualizar sua instalação PEAR já existente antes que você possa proceder com as instruções desta seção.

sudo pear upgrade PEAR geralmente é o suficiente para atualizar uma instalação PEAR existente. O Manual do PEAR explica como fazer uma instalação nova do PEAR.

Composer

Para adicionar o PHPUnit como uma dependência local por-projeto ao seu projeto, simplesmente adicione a dependência que está em phpunit/phpunit ao arquivo composer.json do seu projeto. Aqui está um exemplo mínimo de um arquivo composer.json que apenas define uma dependência em tempo de desenvolvimento do PHPUnit 3.7:

{
"require-dev": {
"phpunit/phpunit": "3.7.*"
}
}

Para uma instalação autônoma para um sistema inteiro via Composer, um composer.json similar ao mostrado abaixo pode ser usado para um diretório arbitrário.

{
"require": {
"phpunit/phpunit": "3.7.*"
},
"config": {
"bin-dir": "/usr/local/bin/"
}
}

PHP Archive (PHAR)

Você também pode baixar um PHP Archive (PHAR) do PHPUnit que tem todas as dependências exigidas (assim como algumas opcionais) do PHPUnit em apenas um arquivo

wget http://pear.phpunit.de/get/phpunit.phar
chmod +x phpunit.phar

Pacotes opcionais

Os seguintes pacotes opcionais estão disponíveis:

DbUnit

porta DbUnit para PHP/PHPUnit para suportar interação com o banco de dados de teste.

Este pacote pode ser instalado via PEAR usando o seguinte comando:

pear install phpunit/DbUnit

Este pacote pode ser instalado via Composer adicionando a seguinte dependência "require-dev":

"phpunit/dbunit": ">=1.2"
PHP_Invoker

Uma classe utilitária para invocações com limite de tempo. Este pacote é exigido para forçar limites de tempo dos testes de um modo específico.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHP_Invoker

Este pacote pode ser instalado via Composer adicionando a seguinte dependência "require-dev":

"phpunit/php-invoker": "*"
PHPUnit_Selenium

Integração do Selenium RC para PHPUnit.

Este pacote pode ser instalado via PEAR usando o seguinte comando:

pear install phpunit/PHPUnit_Selenium

Este pacote pode ser instalado via Composer adicionando a seguinte dependência "require-dev":

"phpunit/phpunit-selenium": ">=1.2"
PHPUnit_Story

Executor de testes baseados em histórico para Desenvolvimento Guiado por Comportamentos com PHPUnit.

Este pacote pode ser instalado via PEAR usando o seguinte comando:

pear install phpunit/PHPUnit_Story

Este pacote pode ser instalado via Composer adicionando a seguinte dependência "require-dev":

"phpunit/phpunit-story": "*"
PHPUnit_SkeletonGenerator

Ferramenta que gera classes de esqueleto de teste a partir das classes dos códigos de produção e vice-versa.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHPUnit_SkeletonGenerator
PHPUnit_TestListener_DBUS

Um ouvinte de testes que envia eventos para DBUS.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHPUnit_TestListener_DBUS
PHPUnit_TestListener_XHProf

Um ouvinte de testes que usa XHProf para perfilar automaticamente o código de teste.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHPUnit_TestListener_XHProf
PHPUnit_TicketListener_Fogbugz

Um ouvinte de tickets que interage com a API de problemas Fogbugz.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHPUnit_TicketListener_Fogbugz
PHPUnit_TicketListener_GitHub

Um ouvinte de tickets que interage com a API de problemas do GitHub.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHPUnit_TicketListener_GitHub
PHPUnit_TicketListener_GoogleCode

Um ouvinte de tickets que interage com a API de problemas do Google Code.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHPUnit_TicketListener_GoogleCode
PHPUnit_TicketListener_Trac

Um ouvinte de tickets que interage com a API de problemas do Track.

Este pacote pode ser instalado usando o seguinte comando:

pear install phpunit/PHPUnit_TicketListener_Trac

Atualizando

Esta seção serve como uma coleção de problemas menores de BC pelos quais alguém poderia passar ao atualizar do PHPUnit 3.6 para o PHPUnit 3.7.

A atualização deve tanto ser fácil quanto trabalhar sem qualquer problema, já que foi testada em todos os principais frameworks OpenSource e não houve qualquer problema com eles. Ainda assim, cada projeto é diferente e se você ainda não experimentou uma das versões candidatas a lançamento e enfrentou um problema, este documento pode fornecer alguma ajuda.

Remoção do obsoleto OutputTestCase

A classe PHPUnit_Extensions_OutputTestCase foi removida. O PHPUnit 3.6 emitia uma notificação de obsolescência quando era usada. Para ver como a saída pode ser testada agora, veja “Testando Saídas”.

O diretório de trabalho atual será restaurado após cada caso de teste

Se um teste mudasse o diretório de trabalho atual (cwd) o PHPUnit incorria em erros quando gerava a cobertura da saída de código. Agora que o cwd é restaurado após cada caso de teste, você pode descobrir se um dos seus testes depende de outro teste alterando o cwd. Algo que não é desejável de qualquer forma, e deveria ser fácil de resolver.

Ouvintes de Teste disparam uma chamada de auto-carregamento

Ao usar ouvintes de testes como descrito em “Ouvintes de Teste”, o PHPUnit ignorava silenciosamente os ouvintes de teste perdidos e era bem difícil para o usuário resolver esses problemas. Agora uma chamada de auto-carregamento será disparada tentando localizar a classe. Se seu auto-carregador produzir um erro quando ele não encontrar um ouvinte de teste, você poderá incorrer em um problema aqui. Remover o ouvinte ou confirmar que ele está sendo carregado em seu bootstrap.php vai resolver isso.

Parâmetros para objetos falsos não são mais clonáveis

Anteriormente todos os parâmetros de objetos eram clonados quando falsificados. Isso causava problemas quando testes tentavam verificar se o mesmo objeto foi passado ou não a um método e outro problema com objetos não-clonáveis. Como uma longa e constante requisição de função, este comportamento foi mudado por muitos. Exemplo 8.14 mostra onde a nova implementação pode ser útil. Exemplo 8.15 mostra como voltar para o comportamento anterior.

addUncoveredFilesFromWhitelist foi substituído por processUncoveredFilesFromWhitelist

Ao gerar uma cobertura de código e usar <whitelist addUncoveredFilesFromWhitelist="true"> todos os arquivos da lista-branca eram incluídos pelo PHPUnit. Esse era um problema para pessoas com código executável nesses arquivos. O PHPUnit agora vai escanear o arquivo e descobrir qual código é executável e qual não é, sem incluí-lo. Isto pode levar a diferentes relatórios de cobertura.

Para voltar ao antigo comportamento a configuração <whitelist processUncoveredFilesFromWhitelist=="true"> pode ser usada. Se você quer o comportamento com PHPUnit 3.6 e 3.7 é possível usar ambas as configurações por um tempo.

Valor padrão de cacheTokens mudou para false

Desde o PHPUnit 3.7.2 desligamos o cache de arquivos tokenizados por padrão. Ao processar coberturas de código para projetos grandes esse cache consumia muita memória e devido à mudança no comportamento da lista-branca, era problemático para pessoas com bases de código com mais de alguns milhares de classes.

Se seu projeto é menor ou você tem memória suficiente você vai ganhar um benefício em tempo de execução por adicionar cacheTokens="true" no seu arquivo phpunit.xml. Veja “PHPUnit”.