
| Versão PHP | versão atoum |
|---|---|
| 5,3 -> 5,6 | 1.x -> 3.x |
| 7,2 -> 8,1 | 4.X -> 4.1 |
| 8.x | 4,1 < 4,X (atual) |
Assim como SimpleTest ou PHPUnit, atoum é uma estrutura de teste unitário específica para a linguagem PHP. No entanto, foi concebido desde o início com as seguintes ideias em mente:
Pode ser implementado rapidamente ,
Simplifique o desenvolvimento de testes,
Permitir escrever testes de unidade confiáveis, legíveis e claros .
Para conseguir isso, ele usa massivamente os recursos fornecidos pelo PHP , para dar ao desenvolvedor uma maneira totalmente nova de escrever testes unitários. Portanto, pode ser instalado e integrado a um projeto existente com extrema facilidade, pois é apenas um único arquivo PHAR , que é o único ponto de entrada para o desenvolvedor. Além disso, graças à sua interface fluente , permite escrever testes unitários de uma forma próxima à linguagem natural. Também facilita a implementação de stubbing nos testes, graças ao uso inteligente de funções anônimas e encerramentos . atoum nativamente e por padrão, executa a execução de cada teste de unidade dentro de um processo PHP separado, para garantir o isolamento . É claro que ele pode ser usado perfeitamente para integração contínua e, devido ao seu design, pode ser feito para atender necessidades específicas com extrema facilidade. O atoum também realiza tudo isso sem afetar o desempenho, uma vez que foi desenvolvido para apresentar um consumo de memória reduzido e, ao mesmo tempo, permitir uma execução acelerada de testes. Também pode gerar relatórios de execução de testes unitários no formato Xunit, o que o torna compatível com ferramentas de integração contínua como Jenkins. O atoum também gera relatórios de cobertura de código, para possibilitar a supervisão de testes unitários. Por fim, embora seja desenvolvido principalmente em UNIX, também pode funcionar em Windows.
o atoum é realmente fácil de instalar: clone-o do github, baixe seu PHAR ou simplesmente use o compositor,
atoum fornece um alto nível de segurança durante a execução do teste, isolando cada método de teste em seu próprio processo PHP. Obviamente, esse recurso está disponível imediatamente, sem necessidade de instalar nenhuma extensão adicional,
atoum executa testes em um ambiente paralelizado, fazendo com que o conjunto seja executado o mais rápido possível, aproveitando as vantagens das CPUs multi-core atuais,
atoum fornece um conjunto completo de afirmações naturais e expressivas, tornando os testes o mais legíveis possível. Aqui está um exemplo:
<?php$this->inteiro(150)
->éMaiorQue(100)
->isLowerThanOrEqualTo(200)
;atoum suporta uma sintaxe semelhante ao BDD com muitas palavras-chave estruturais:
<?php$this->dado($testedInstance = newtestClass())
->e($testedClass[] = $firstValue = uniqid())
->então->sizeof($testedInstance)->isEqualTo(1)
->string($testedClass[0])->isEqualTo($firstValue)
;atoum fornece um mecanismo simulado extremamente simples, mas muito poderoso:
<?php$this->dado($testedInstance = newtestClass())
->and($aMock = new mockfoobar()) // aqui um mock da classe foobar é criado dinamicamente->and($this->calling($aMock)->doOtherThing = true) // cada chamada para doOtherThing( ) pela instância retornará true->and($testedInstance->setDependency($aMock))
->então->boolean($testedInstance->doSomething())->isTrue()
->mock($aMock)
->call('doOtherThing')->withArguments($testedInstance)->once() // Afirma que o método doOtherThing() de $aMock foi chamado uma vez;atoum fornece uma API clara para afirmar exceções:
<?php$this->dado($testedInstance = newtestClass())
->and($aMock = new mockfoobar()) // aqui um mock da classe foobar é criado dinamicamente->and($this->calling($aMock)->doOtherThing->throw = $exception = new exception( )) // A chamada para doOtherThing() lançará uma exceção->and($testedInstance->setDependency($aMock))
->então->exception(function() use ($testedInstance) { $testedInstance->doSomething(); })
->isIdenticalTo($exceção)
;atoum também permite simular funções nativas do PHP. Novamente, isso está disponível imediatamente:
<?php$this->dado($this->função->session_start = falso)
->e($sessão = nova classe testada())
->then->exception(function() use ($session) { $session->start(); })
->isInstanceOf('projetonamespaceexception')
->hasMessage('Não foi possível iniciar a sessão')
->function('session_start')->wasCalled()->once()
;atoum é capaz de produzir diversos relatórios como TAP, clover, xUnit para serem facilmente integrados com Jenkins ou qualquer outra ferramenta de integração contínua,
atoum oferece suporte a provedores de dados,
testes atoum suportam execução automática: basta incluir o executor atoum e iniciar seu teste usando php path/to/test/file.php ,
O arquivo de configuração do atoum é escrito exclusivamente em PHP (sem XML, YAML ou qualquer outro formato), oferecendo a melhor flexibilidade:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/testes/unidades/classes');$testGenerator = new atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/testes/unidades/classes');
->setTestClassNamespace('atomatoumtestsunits');
->setTestedClassesDirectory(__DIR__ . '/classes');
->setTestedClassNamespace('atomatoum')
->setRunnerPath(__DIR__. '/scripts/runner.php')
;$runner->setTestGenerator($testGenerator);atoum fornece um gerador automático de modelos de teste,
atoum fornece um modo de loop para reativar facilmente testes com falha,
atoum está repleto de outros recursos interessantes que você descobrirá com o tempo.
atoum requer absolutamente PHP >= 5.6.0 ou posterior para funcionar. No UNIX, para verificar se você possui a versão correta do PHP, basta executar o seguinte comando em seu terminal:
$php-v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
Se PHP 5.6.x ou equivalente for exibido, então você tem a versão correta do PHP instalada. Se você quiser usar o atoum usando seu arquivo PHAR, você também precisará do PHP para poder acessar o módulo phar , que normalmente está disponível por padrão. No UNIX, para verificar se você possui este módulo ou não, basta executar o seguinte comando em seu terminal:
$php-m | grep -i far
Se Phar ou equivalente for exibido, o módulo está instalado corretamente. A geração de relatórios no formato Xunit requer o módulo xml . No UNIX, para verificar se você possui este módulo ou não, basta executar o seguinte comando em seu terminal:
$php-m | grep -ixml
Se Xml ou equivalente for exibido, o módulo está instalado corretamente. Caso deseje monitorar a taxa de cobertura do seu código pelos testes unitários, o módulo Xdebug 2.3 será necessário. No UNIX, para verificar se você possui este módulo ou não, basta executar o seguinte comando em seu terminal:
$php-v | grep -oi 'xdebug'
Se Xdebug ou equivalente for exibido, o módulo está instalado corretamente.
Basta baixar seu arquivo PHAR e armazená-lo onde desejar, por exemplo em /path/to/project/tests/atoum.phar . Este arquivo PHAR contém a versão de desenvolvimento mais recente para passar na totalidade dos testes de unidade do atoum . O código-fonte do atoum também está disponível no repositório GitHub. Para verificar se o atoum funciona corretamente com sua configuração, você pode executar todos os seus testes unitários. Para fazer isso, basta executar o seguinte comando em seu terminal:
$ php atoum.phar --test-it
Usando seu editor de texto preferido, crie o arquivo path/to/project/tests/units/helloWorld.php e adicione o seguinte código:
<?phpnamespace vendorprojecttestsunits;require_once 'caminho/para/atoum.phar';include_once 'caminho/para/projeto/classes/helloWorld.php';use atoumatoum;use vendorproject;class helloWorld estende atoumtest
{função pública testSay()
{$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello World!');
}
}Inicie seu terminal e execute o seguinte comando:
$ php caminho/para/teste/arquivo[enter]
Você deve obter o seguinte resultado ou algo equivalente:
> versão atoum XXX de Frédéric Hardy. Erro: exceção autônoma: a classe testada 'vendorprojecthelloWorld' não existe para a classe de teste 'vendorprojecttestsunitshelloWorld'
Usando novamente seu editor de texto preferido, crie o arquivo path/to/project/classes/helloWorld.php e adicione o seguinte código:
<?phpnamespace fornecedorprojeto;classe helloWorld
{função pública dizer()
{retornar 'Olá, mundo!';
}
}No mesmo terminal, execute o seguinte comando mais uma vez:
$ php caminho/para/teste/arquivo[enter]
Você deve obter o seguinte resultado ou algo equivalente:
> atoum versão 288 de Frédéric Hardy.> Execute vendorprojecttestsunitshelloWorld... [S_____________________________________________________________][1/1] => Duração do teste: 0,00 segundo. => Uso de memória: 0,25 Mb.> Duração total do teste: 0,00 segundo.> Uso total de memória de teste: 0,25 Mb.> Valor de cobertura de código: 100,00%> Duração da execução: 0,08 segundo.> Sucesso (1 teste, 1 método, 2 asserções , 0 erro, 0 exceção)!
<?phpnamespace vendorprojecttestsunits;require_once 'caminho/para/atoum.phar';include_once 'caminho/para/projeto/classes/helloWorld.php';use atoumatoum;use vendorproject;class helloWorld estende atoumtest
{função pública test__construct()
{$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello!')
->string($helloWorld->say($name = 'Frédéric Hardy'))->isEqualTo('Hello ' . $name . '!')
;
}
}A documentação do atoum ainda está sendo escrita. Qualquer ajuda para melhorá-lo será apreciada. No entanto, se você quiser explorar mais imediatamente as possibilidades do atoum , recomendamos:
Executando em seu terminal, o comando php atoum.phar -h , ou o comando php scripts/runner.php -h ,
Explorando o conteúdo do diretório configurations na fonte do atoum , pois contém exemplos de arquivos de configuração,
Explorando o conteúdo do diretório tests/unit/classes na fonte de atoum , pois contém todos os testes unitários,
Leia os slides da conferência (em francês) sobre o assunto, disponíveis on-line,
Leia o wiki (francês),
Participe do canal de discussão,
Tire dúvidas por e-mail no endereço support[AT]atoum(DOT)org .
Nesse caso, a primeira coisa que você deseja fazer é confirmar se possui a versão mais recente do arquivo. Você só precisa baixá-lo novamente. Se ainda não funcionar, execute o seguinte comando em uma janela de terminal:
$ php -n atoum.phar -v
Se você obtiver o número da versão de atoum , o problema está na configuração do PHP. Na maioria dos casos, a causa estaria dentro de extensões, que poderiam ser incompatíveis com o formato PHAR, ou que impediriam a execução de arquivos PHAR como medida de segurança. A extensão ioncube , por exemplo, parece incompatível com arquivos PHAR, e você deve, portanto, desativá-la se estiver usando-a, comentando a seguinte linha do seu php.ini , prefixando-a com ; personagem:
zend_extension = /path/to/ioncube_loader*.*
A extensão suhosin impede a execução de arquivos PHAR, portanto sua configuração padrão deve ser modificada para poder utilizar atoum , adicionando a seguinte linha em seu arquivo php.ini :
suhosin.executor.include.whitelist="phar"
Finalmente, se a execução de atoum faz com que a tela exiba caracteres parecidos com ???% , isso ocorre porque a diretiva detect_unicode dentro do seu arquivo php.ini está definida como 1. Para corrigir o problema, você só precisa defini-la como 0 por editando seu arquivo php.ini ou executando atoum com o seguinte comando:
$ php -d detect_unicode=0 atoum.phar [opções]
Caso essas três operações não permitam o funcionamento do atoum , sugerimos que você envie um e-mail para o endereço support[AT]atoum(DOT)org , descrevendo detalhadamente sua configuração e seu problema. Você também pode pedir ajuda à equipe de desenvolvimento do atoum no canal de discussão do repositório atoum.
__COMPILER_HALT_OFFSET__ já definida /path/to/atoum.phar Este erro ocorre porque o arquivo atoum PHAR está incluído em mais de um local no seu código usando include ou require . Para corrigir esse problema, basta incluir o arquivo usando apenas include_once ou require_once , para garantir que ele não seja incluído várias vezes.
APC é uma estrutura gratuita, aberta e robusta para armazenar em cache e otimizar código intermediário PHP distribuído sob a forma de uma extensão PHP. Ao testar classes que usam APC, você pode receber alguma mensagem de falha mostrando que a função apc_fetch não consegue recuperar um valor. Como toda extensão PHP, a APC possui algumas opções de configuração para habilitá-la:
apc.enabled para ativar ou desativar o APC,
apc.enable_cli , para ativar ou desativar o APC para PHP CLI.
Para usar APC com atoum , você deve definir apc.enabled e apc.enable_cli como 1 , caso contrário, ele não estará habilitado para a versão PHP CLI, que é usada por atoum .
Ao usar objetos atoum e mocking, às vezes você receberá segfaults vindos do PHP. Esses segfaults são causados pelo XDebug na versão inferior a 2.1.0, que apresenta problemas ao lidar com a reflexão em alguns casos. Para verificar a versão atual do XDebug, você pode executar php -v . Para corrigir esse problema, você deve atualizar o XDebug para a versão estável mais recente. Se você não conseguir atualizar o XDebug em seu sistema, ainda poderá desabilitar a extensão para evitar falhas de segurança. Para ter certeza de que o XDebug foi atualizado ou desabilitado com sucesso, você pode executar php -v . Quando terminar de atualizar ou desabilitar o XDebug, execute php atoum.phar --test-it para ter certeza de que todos os segfaults foram eliminados e que o atoum está funcionando.
Procurando um roteiro?
Aqui está o trabalho em andamento,
E aí o que virá nos próximos lançamentos.
atoum foi criado por Frédéric Hardy. Agora é liderado por uma forte comunidade de colaboradores. Você pode encontrá-los na lista de committers ou na equipe de Colaboradores.
atoum é lançado sob a licença BSD-3-Clause. Consulte o arquivo LICENSE incluído para obter detalhes.