Entropy é uma biblioteca que fornece ferramentas para trabalhar com testes aleatórios no PHPUnit, bem como para testar sistemas que fazem uso de funções aleatórias do PHP, como rand
e shuffle
.
Às vezes, os testes de unidade exigem alterações no estado global ou abrangem funcionalidades que alteram esse estado. Embora esta nunca seja uma situação ideal, muitas vezes pode resultar na criação de dependências inadvertidas em outros testes.
A ativação da funcionalidade de embaralhamento de testes do Entropy randomiza a ordem dos seus testes, ajudando a destacar essas dependências.
O embaralhamento de testes do Entropy também evita alterar a ordem dos testes usando a funcionalidade @depends
do PHPUnit; trabalhos futuros trabalharão para garantir que o embaralhamento ainda possa ocorrer para esses testes, quando apropriado.
Às vezes, você pode se encontrar em uma situação em que a gama de entradas para uma função é tão grande que obter uma seção transversal dessas entradas é um uso mais eficiente de seus recursos. Mas o que acontece se essa seção transversal tiver buracos onde seus testes possam falhar?
Uma maneira de contornar isso é usar entradas aleatórias, onde as entradas são geradas de forma a obter uma seção transversal aleatória dos intervalos. Em outras palavras, usando rand
ou outra abordagem não determinística.
Uma extensão disso, o teste baseado em propriedades é a prática de aplicar entradas aleatórias ao seu aplicativo ou função e observar se a saída segue certas regras ou tem certas propriedades relativas à entrada, em vez de testes precisos de igualdade com um resultado conhecido. definir.
Ao gerenciar a semente aleatória para seus testes, o Entropy permite não apenas o uso dessas abordagens, mas também torná-las repetíveis, seja aceitando uma semente fixa ou recuperando-a da última execução com falha até a aprovação do seu conjunto de testes.
Você pode adicionar esta biblioteca ao seu projeto usando o Composer:
$ composer require datto/phpunit-entropy
Depois de configurado, você pode executar seu conjunto de testes normalmente; o ouvinte cuidará de si mesmo. Em caso de erro ou falha no teste, o seed utilizado será armazenado em um arquivo temporário, para que na próxima execução seja reaproveitado, ao invés de ser gerado um novo seed.
A semente para o gerador de números aleatórios é fornecida em até quatro locais, apresentados aqui em ordem de prioridade.
Se definida, a variável de ambiente SEED
será usada para substituir quaisquer outras configurações. Ele pode ser definido via export
, mas o uso recomendado é configurá-lo apenas para a execução atual:
SEED=123456 phpunit -c phpunit.xml tests
A semente pode ser fixada por configuração; consulte a seção Configuração abaixo.
Se uma execução de teste falhar, a semente usada será armazenada em um arquivo temporário. Isso é então carregado em um teste subsequente e persistirá até que o conjunto seja bem-sucedido novamente.
Se nenhuma semente for definida através dos métodos acima, o método final é usar a função rand
do PHP.
Uma vez instalado via compositor, configurar o ouvinte de teste é simplesmente uma questão de alterar seu arquivo de configuração do PHPUnit (geralmente phpunit.xml
):
< phpunit xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : noNamespaceSchemaLocation = " http://schema.phpunit.de/4.1/phpunit.xsd "
backupGlobals = " false "
colors = " true "
bootstrap = " bootstrap.php "
>
< listeners >
< listener class = " DattoPHPUnitEntropyListener " >
< arguments >
< array >
< element key = " seeding " >
< array >
< element key = " enabled " >
< boolean >true</ boolean >
</ element >
< element key = " seed " >
< integer >1234567</ integer >
</ element >
< element key = " file " >
< string >/tmp/phpentropy-seed</ string >
</ element >
</ array >
</ element >
< element key = " shuffle " >
< boolean >true</ boolean >
</ element >
</ array >
</ arguments >
</ listener >
</ listeners >
</ phpunit >
Se definido como verdadeiro, o gerador de números aleatórios será propagado pelo ouvinte.
Se você definir a semente por meio deste argumento, somente esse valor será usado para semear o gerador de números aleatórios. Veja a seção sobre prioridade de sementes abaixo.
Se definido, este arquivo será usado para armazenar a última semente aleatória com falha; o padrão é [TMPDIR LOCATION]/phpunit-entropy-seed
.
Se definido como verdadeiro, a ordem em que os testes unitários são executados será aleatória (exceto para suítes onde @depends
está em uso). Isso é útil para determinar e identificar dependências entre testes.
Christopher Hoult <[email protected]>