Prev Next

Capítulo 3. 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 10.14 mostra onde a nova implementação pode ser útil. Exemplo 10.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”.

Prev Next
1. Automatizando Testes
2. Objetivos do PHPUnit
3. Instalando o PHPUnit
PEAR
Composer
PHP Archive (PHAR)
Pacotes opcionais
Atualizando
4. Escrevendo Testes para o PHPUnit
Dependências de Testes
Provedores de Dados
Testando Exceções
Testando Erros PHP
Testando Saídas
Asserções
assertArrayHasKey()
assertClassHasAttribute()
assertClassHasStaticAttribute()
assertContains()
assertContainsOnly()
assertContainsOnlyInstancesOf()
assertCount()
assertEmpty()
assertEqualXMLStructure()
assertEquals()
assertFalse()
assertFileEquals()
assertFileExists()
assertGreaterThan()
assertGreaterThanOrEqual()
assertInstanceOf()
assertInternalType()
assertJsonFileEqualsJsonFile()
assertJsonStringEqualsJsonFile()
assertJsonStringEqualsJsonString()
assertLessThan()
assertLessThanOrEqual()
assertNull()
assertObjectHasAttribute()
assertRegExp()
assertStringMatchesFormat()
assertStringMatchesFormatFile()
assertSame()
assertSelectCount()
assertSelectEquals()
assertSelectRegExp()
assertStringEndsWith()
assertStringEqualsFile()
assertStringStartsWith()
assertTag()
assertThat()
assertTrue()
assertXmlFileEqualsXmlFile()
assertXmlStringEqualsXmlFile()
assertXmlStringEqualsXmlString()
Saída de Erro
Casos Extremos
5. O executor de testes em linha-de-comando
Comutadores de linha-de-comando
6. Ambientes
Mais setUp() que tearDown()
Variantes
Compartilhando Ambientes
Estado Global
7. Organizando Testes
Compondo uma Suíte de Testes usando o Sistema de Arquivos
Compondo uma Suíte de Testes Usando uma Configuração XML
8. Testando Bancos de Dados
Fornecedores Suportados para Testes de Banco de Dados
Dificuldades em Testes de Bancos de Dados
Os quatro estágios dos testes com banco de dados
1. Limpar o Banco de Dados
2. Configurar o ambiente
3–5. Executar Teste, Verificar saída e Teardown
Configuração de Caso de Teste de Banco de Dados do PHPUnit
Implementando getConnection()
Implementando getDataSet()
E quanto ao Esquema do Banco de Dados (DDL)?
Dica: Use seu próprio Caso Abstrato de Teste de Banco de Dados
Entendendo Conjunto de Dados e Tabelas de Dados
Implementações disponíveis
Cuidado com Chaves Estrangeiras
Implementando seus próprios Conjuntos de Dados/ Tabelas de Dados
A API de Conexão
API de Asserções de Banco de Dados
Assertando a contagem de linhas de uma Tabela
Assertando o Estado de uma Tabela
Assertando o Resultado de uma Query
Assertando o Estado de Múltiplas Tabelas
Perguntas Mais Frequentes
O PHPUnit vai (re)criar o esquema do banco de dados para cada teste?
Sou forçado a usar PDO em minha aplicação para que a Extensão para Banco de Dados funcione?
O que posso fazer quando recebo um Erro Too much Connections?
Como lidar com NULL usando Conjuntos de Dados XML Plano / CSV?
9. Testes Incompletos e Pulados
Testes Incompletos
Pulando Testes
Pulando Testes usando @requires
10. Dublês de Testes
Esboços (stubs)
Objetos Falsos
Esboçando e Falsificando Serviços Web
Esboçando o Sistema de Arquivos
11. Práticas de Teste
Durante o Desenvolvimento
Durante a Depuração
12. Desenvolvimento Guiado por Testes
Exemplo da Conta Bancária
13. Desenvolvimento Guiado por Comportamento
Exemplo do Jogo de Boliche
14. Análise de Cobertura de Código
Especificando métodos cobertos
Ignorando Blocos de Código
Incluindo e Excluindo Arquivos
Casos Extremos
15. Outros Usos para Testes
Documentação Ágil
Testes Inter-Equipes
16. Gerador de Esqueleto
Gerando um Esqueleto de Classe de Caso de Teste
Gerando uma Classe Esqueleto de uma Classe de Caso de Teste
17. PHPUnit e Selenium
Servidor Selenium
Instalação
PHPUnit_Extensions_Selenium2TestCase
PHPUnit_Extensions_SeleniumTestCase
18. Registrando
Resultados de Teste (XML)
Resultados de Teste (TAP)
Resultados de Teste (JSON)
Cobertura de Código (XML)
Cobertura de Código (TEXTO)
19. Estendendo o PHPUnit
Subclasse PHPUnit_Framework_TestCase
Escreva asserções personalizadas
Implementando PHPUnit_Framework_TestListener
Subclasse PHPUnit_Extensions_TestDecorator
Implementando PHPUnit_Framework_Test
A. Assertions
B. Anotações
@author
@backupGlobals
@backupStaticAttributes
@codeCoverageIgnore*
@covers
@coversNothing
@dataProvider
@depends
@expectedException
@expectedExceptionCode
@expectedExceptionMessage
@group
@outputBuffering
@requires
@runTestsInSeparateProcesses
@runInSeparateProcess
@test
@testdox
@ticket
C. O arquivo de configuração XML
PHPUnit
Suítes de Teste
Grupos
Incluindo e Excluindo Arquivos para Cobertura de Código
Registrando
Ouvintes de Teste
Setting PHP INI settings, Constants and Global Variables
Configurando Navegadores para Selenium RC
D. Índice
E. Bibliografia
F. Copyright