PHPUnit

Testes unitários com PHPUnit no CodeIgniter

Desenvolver utilizando testes unitários é uma ótima forma de você evitar que sua aplicação chegue à produção contendo bugs, e fazer isso no CodeIgniter é bastante simples. Com poucos comandos e configurações você poderá fazer testes utilizando o PHPUnit e o terminal.

Nesse tutorial vou mostrar como instalar o PHPUnit através do Composer, fazer as configurações necessárias e escrever uma rotina de teste.

Criando o projeto e instalando o PHPUnit via Composer

Para criar o projeto vamos utilizar o Composer. Abra o terminal e execute o comando abaixo, que fará o download da última versão do CodeIgniter, dentro do diretório do projeto.

composer create-project bcit-ci/codeigniter testes-unitarios-no-codeigniter --prefer-dist

Ao concluir a criação do projeto, abra o arquivo composer.json, para que possamos atualizar as dependências, adicionando o PHPUnit. Atualize o arquivo conforme o código a seguir:

Com o arquivo atualizado, execute os comandos a seguir no terminal para acessar o diretório do projeto e instalar as dependências:

cd /path/do/projeto

composer update

Para completar o processo de configuração do projeto, precisamos atualizar o arquivo application/config/config.php, para que o autoload do Composer seja carregado.

Atualize a linha 139 do arquivo conforme o código a seguir:

$config['composer_autoload'] = './vendor/autoload.php';

Criando a estrutura de testes

Com o projeto devidamente configurado, é hora de começar a escrever os testes. O primeiro passo é criar o diretório tests na raiz do projeto, pois é nele que ficarão armazenados os códigos dos testes a serem executados.

Após criar o diretório tests, crie um arquivo chamado phpunit.xml.dist na raiz do projeto. Esse arquivo vai conter configurações do PHPUnit para a realização dos testes. Adicione a esse arquivo o código a seguir:

É um arquivo bem simples. Ele contém informações básicas sobre a estrutura de testes como por exemplo:

colors=”true”: vai colorir as lihas informativas de erro ou sucesso

<directory>./tests/</directory>: define qual é o diretório oinde estão localizados os arquivos com os testes a serem executados

<directory>./system/</directory>: adiciona o diretório system do CodeIgniter na whitelist

Existem muitas outras configurações que podem ser aplicadas, e você pode encontrá-las na documentação oficial do PHPUnit.

Com o arquivo de configuração dos testes criado, é hora de criar os testes propriamente ditos. Crie um arquivo chamado SampleTest.php no diretório tests. Nesse arquivo vamos escrever uma rotina de teste com PHPUnit para ser executada.

Utilize o código a seguir no arquivo que acabamos de criar:

Após criar esse arquivo, você já pode executar os testes através do terminal. Para isso execute o comando a seguir:

php vendor/phpunit/phpunit/phpunit

O resultado deverá ser algo como:

PHPUnit 4.8.27 by Sebastian Bergmann and contributors.

.

Time: 66 ms, Memory: 4.00MB

OK (1 test, 5 assertions)

Viu como é fácil escrever e executar os testes via linha de comando com CodeIgniter e PHPUnit? Nesse exemplo executamos os testes sem utilizar nenhum recurso nativo do CodeIgniter, como libraries e helpers.

Para fazer testes utilizando recursos nativos do CodeIgniter é necessário fazer alguns ajustes no arquivo phpunit.xml.dist e criar um arquivo chamado Bootstrap.php dentro de tests, para garantir o acesso a todos os recurso do CodeIgniter durante os testes.

Atualize o arquivo phpunit.xml.dist conforme o código a seguir:

Agora crie o arquivo Bootstrap.php dentro do diretório tests, conforme o código a seguir:

Feito isso, execute novamente o teste através do terminal. Você verá que antes de exibir o resultado do teste está sendo exibido um código HTML, referente à view welcome_message, que é o retorno da rota padrão do CodeIgniter.

Para resolver esse problema, acesse o arquivo application/controllers/Welcome.php e adicione uma condicional pra a exibição da view, conforme o código a seguir, assim a view só será exibida se a solicitação não estiver sendo feita via terminal.

if (!is_cli()){
  $this->load->view('welcome_message');
}

Rode novamente o teste e verá que o código HTML não é mais exibido.

Agora vamos criar um novo teste usando recurso nativo do CodeIgniter. Abra o arquivo tests/Sampletest.php e atualize conforme o código a seguir:

Agora basta executar o comando de teste no terminal para ver o resultado.

É bem simples utilizar o PHPUnit para fazer testes unitários utilizando em projetos com CodeIgniter. Para conhecer outros comando do PHPUnit, acesse a documentação oficial.

Até o próximo tutorial!