A ferramenta de teste de linha de comando PHPUnit é chamada por meio do comando phpunit. O código a seguir mostra como executar testes por meio da ferramenta de teste de linha de comando PHPUnit.
phpunitArrayTest
PHPUnit 2.3.0 por Sebastian Bergmann
Tempo: 0,067288
OK (2 testes)
Para cada teste, a ferramenta de teste de linha de comando do PHPUnit imprime um caractere indicando o processo:
· Um teste bem-sucedido imprime ".".
·Ao executar o método de teste, ocorre uma falha na asserção e é impresso "F".
·Ao executar o método de teste, ocorre um erro e é impresso "E".
·O teste não foi concluído ou o teste não imprime "I" (veja o capítulo "Testes Inacabados" no final deste livro).
PHPUnit pode distinguir entre falhas e erros. Uma falha é uma violação de asserção do PHPUnit e um erro é uma exceção inesperada ou um erro de PHP. Às vezes, essa distinção é útil porque os erros são mais fáceis de corrigir do que as falhas. Se você tiver uma longa lista de problemas, é uma boa ideia resolver todos os erros primeiro e depois ver se alguma falha permanece.
Vejamos algumas das opções da ferramenta de teste de linha de comando de código abaixo:
phpunit --help
PHPUnit 2.3.0 por Sebastian Bergmann
Uso: phpunit [switches] UnitTest [UnitTest.php]
--coverage-data <arquivo> Grava dados de cobertura de código em formato bruto em arquivo.
--coverage-html <arquivo> Grava dados de cobertura de código em formato HTML no arquivo.
--coverage-text <arquivo> Grava dados de cobertura de código em formato de texto no arquivo.
--testdox-html <arquivo> Escreva documentação ágil em formato HTML para arquivo.
--testdox-text <arquivo> Escreva documentação ágil em formato de texto para arquivo.
--log-xml <arquivo> Registra o progresso do teste em formato XML para arquivo.
--loader <loader> Implementação TestSuiteLoader a ser usada.
--skeleton Gera o esqueleto da classe UnitTest para Unit em Unit.php.
--wait Espera por um pressionamento de tecla após cada teste.
--help Imprime essas informações de uso.
--version Imprime a versão e sai
do phpunit UnitTest
executa os testes fornecidos pela classe UnitTest, que deve ser definida no arquivo fonte UnitTest.php.
A classe UnitTest deve herdar a classe PHPUnit2_Framework_TestCase ou fornecer um conjunto de métodos estáticos públicos e retornar a classe do objeto PHPUnit2_Framework_Test (por exemplo, uma instância da classe PHPUnit2_Framework_TestSuite)
phpunit UnitTest UnitTest.php
executa o teste fornecido pela classe UnitTest, que é definido no comando No arquivo de origem especificado (UnitTest.php).
--coverage-data, --coverage-html e --coverage-text
controlam a análise e coleta de informações de cobertura de código para execução de testes (consulte a seção Análise de cobertura de código no final deste livro)
--testdox-html e --testdox- text
gera documentação ágil para execução de testes em formato HTML ou texto simples (veja o capítulo "Outros usos de testes" no final deste livro).
--log-xml
gera arquivos de log em formato XML para execução de testes.
O próximo exemplo mostra o arquivo de log XML gerado para os testes em ArrayTest.
<?xml versão="1.0" codificação="UTF-8"?>
<conjuntos de testes>
<testsuite name="ArrayTest" testes="2" falhas = "0" erros = "0" time = "0.020026">
<testcase name="testNewArrayIsEmpty" class="ArrayTest" time="0.014449"/>
<testcase name="testArrayContainsAnElement" class="ArrayTest" time="0.005577"/>
</testesuite>
</testsuites>
O seguinte arquivo de log XML é gerado para dois testes da classe de teste chamada FailureErrorTest, um é testFailure e o outro é testError. Isso mostra como falhas e erros são representados separadamente.
<?xml versão="1.0" codificação="UTF-8"?>
<conjuntos de testes>
<testsuite name="FailureErrorTest" testes="2" falhas="1" erros="1" time="0.013603">
<testcase name="testFailure" class="FailureErrorTest" time="0.011872">
<mensagem de falha="" type="PHPUnit2_Framework_AssertionFailedError"></failure>
</caso de teste>
<nome do caso de teste="testError" class="FailureErrorTest" time="0.001731">
<mensagem de erro="" tipo="Exceção"></erro>
</caso de teste>
</testesuite>
</testsuites>
--loader
especifica o carregador do conjunto de testes a ser usado.
O carregador do conjunto de testes padrão procura arquivos de origem no diretório de trabalho atual e no caminho definido pela diretiva de configuração include_path do PHP. De acordo com as regras de nomenclatura do PEAR, o arquivo fonte mapeado para um nome de classe no formato Project_Package_Class é Project/Package/Class.php.
--skeleton
gera um esqueleto para uma classe de caso de teste chamada UnitTest (no arquivo UnitTest.php) para a classe Unit (no arquivo Unit.php). Para cada método da classe original, um caso de teste inacabado é fornecido na classe de caso de teste gerada (veja a seção “Testes Inacabados” no final deste livro).
O exemplo a seguir mostra como gerar uma classe de teste básica para uma classe chamada Sample.
phpunit --esqueleto Amostra
PHPUnit 2.3.0 por Sebastian Bergmann.
Escreveu o esqueleto da classe de teste para Sample to
SampleTest.php.
Teste de amostra phpunit
PHPUnit 2.3.0 por Sebastian Bergmann.
EU
Tempo: 0,007268
Houve 1 caso de teste incompleto:
1) testSampleMethod(SampleTest)
OK, mas casos de teste incompletos!!!
Testes executados: 1, casos de teste incompletos: 1.
Ao escrever testes para código existente, você precisa repetir muitos dos mesmos trechos de código, como:
public function testSampleMethod( ) {}
PHPUnit pode ajudá-lo a analisar o código existente e gerar um estrutura para classes de casos de teste.
--wait
Ao final de cada teste, aguarde um pressionamento de tecla. Isto é útil especialmente se você estiver executando testes em uma janela onde apenas o teste está sendo executado o tempo todo.
Dica: Quando houver um erro de sintaxe PHP no código que está sendo testado, o teste da interface de texto será encerrado diretamente, sem gerar nenhuma mensagem de erro. O carregador do conjunto de testes padrão verifica os arquivos de origem do conjunto de testes em busca de erros de sintaxe PHP, no entanto, ele não verifica os arquivos de origem incluídos no conjunto de testes em busca de erros de sintaxe. Versões futuras do PHPUnit resolverão esse problema usando classes interpretadoras de PHP em sandbox.