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.
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.
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.
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
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.
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/" } }
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
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
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.
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”.
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.
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.
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.
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”.