PHP SP

Como escrever testes .phpt – parte 1

Existem diversos tipos de testes para varias finalidades, comportamento, integração, unitários entre outros, mas quando falamos a respeito de escrever testes, sempre estamos com uma aplicação na mente, vamos ver como podemos escrever testes usando arquivos no formato phpt.

O que é .phpt ?

Um teste phpt é um pequeno script usado pelo php-src e equipes de QA para testar as funcionalidades do PHP, e ele pode ser usado com novos lançamentos para certificar-se de que eles continuem funcionando como nas versões anteriores, ou para ajudar a encontrar erros em versões atuais.

Que habilidades são necessárias para escrever um teste phpt?

Tudo o que é realmente necessário para escrever um teste phpt é um conhecimento básico da linguagem PHP, um editor de texto e uma maneira de obter os resultados de seu código. É isso.

Então se você tem escrito e executado scripts PHP, você tem tudo que você precisa.

Como começar escrever testes phpt?

Os arquivos .phpt testes seguem uma Convenção de nomenclatura muito restrita, isso é feito para identificar facilmente o que cada teste phpt faz, os testes devem ser nomeados de acordo com a lista a seguir:

Teste para bugs

Este tipo de teste é geralmente usado quando temos que escrever algum teste para garantir que um determinado bug já resolvido realmente está funcionando, usamos no nome do arquivo, bug<bugid>.phpt

Veja um exemplo de um bug reportado e um exemplo de um arquivo de bug .phpt escrito para garantir que este bug este corrigido corretamente.

Test para um comportamento básico da função

Usamos este tipo de teste para realizar testes básicos de uma determinada funcionalidade de uma função e o nome do arquivo fica desta maneira, <functionname>_basic.phpt.
Veja um exemplo de um teste basic.

Teste para uma função com erro

Utilizamos este tipo de teste para escrever alguns casos que resultarão em erros, a nomenclatura do arquivo é assim <functionname>_error.phpt e aqui você pode conferir um exemplo deste tipo de teste.

Teste para a variação de uma função

Neste caso, é quando queremos realizar vários tipos de testes, muito mais além do _basic.phpt, neste caso temos a opção de fazer variações de testes, assim escrevemos um caso de teste em um arquivo <functionname>_variation1.phpt e outro tipo de caso de teste em outro arquivo <functionname>_variation2.phpt e assim sucessivamente como
nos exemplos abaixo:

array_change_key_case_variation.phpt

array_change_key_case_variation1.phpt

array_change_key_case_variation2.phpt

array_change_key_case_variation3.phpt

array_change_key_case_variation4.phpt

array_change_key_case_variation5.phpt

Teste para extensões

Este tipo de teste é utilizado para teste de extensões no php, sua nomenclatura é
<extname><no>.phpt e aqui segue um exemplo de um teste para a extensão broker e aqui exemplo para a extensão mysqli.

Estrutura de um arquivo .phpt

--TEST--
Esta é a tag test que serve para ser exibida a assinatura da função a ser testada.
--SKIPIF--
Esta tag é importantíssima, caso seja testado algo que tenha dependências externas, o teste somente continua se esta lib ou dependencia realmente existe.
Aqui vai a saída, nesta tag, somente a saída em stringUse este arquivo .phpt como exemplo para criar seu script de teste.
<?php
if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platforms only");
?>
--CREDITS--
Aqui pode ser colocado os dados do dev que escreveu o teste
marcosptf - <[email protected]>
#phptestfest PHPSP on Google - Sao Paulo - Brazil - 2014-06-05
--FILE--
Aqui vai todo o conteúdo do teste realmente a ser executado
<?php
/* Do not change this test it is a README.TESTING example. */
$trans = array("hello"=>"hi", "hi"=>"hello", "a"=>"A", "world"=>"planet");
var_dump(strtr("# hi all, I said hello world! #", $trans));
?>
--EXPECT--
string(32) "# hello All, I sAid hi planet! #"
--EXPECTF--
Saida do teste, quando existem resultados em float
string(3) "%s"
--EXPECTREGEX--
Saida do teste, quando existem resultados em regex
string(18) "nicax00turska panica"
string(19) " nicax00turska panica"

Boas práticas

Ao contrario de outras plataformas, no php é sugerido que cada script seja testado algo em específico, com poucas linhas e que seja o mais objetivo possível. Isto porque quando um bug é aberto ou uma refatoração é necessária, é mais rápido, muito menos custoso e fácil realizar debug em um arquivo assim do que assim 🙂

Para uma lista completa de todas as tags para escrever scripts .phpt, confira aqui .

Powered by WPeMatico