CakePHP e PHPUnit, como essa mistura pode te ajudar?


CakePHP e PHPUnit, como essa mistura pode te ajudar?

Neste post vou te mostrar como essa mistura de CakePHP com PHPUnit pode contribuir para desenvolver teu site de maneira ágil e com testes precisos.

Não sabe o que é o CakePHP ou PHPUnit? Posso te explicar!

CakePHP é um framework em PHP para desenvolvimento ágil. O principal objetivo é permitir que você trabalhe em uma estrutura que possa programar de uma forma rápida e sem a perda de flexibilidade. Também possui classes e objetos adicionais que fazem o desenvolvimento em MVC(model, view, controller), com algumas pitadas de linha de código você já tem uma base precisa para o desenvolvimento.

Já o PHPUnit é uma framework que automatiza e padroniza os testes do código, toda vez que precisar fazer um debug (aquele velho "var_dump("a");die;)  pense em criar um teste, pode parecer perda de tempo, mas vai te fazer ganhar muito no final. Além disso ele possui uma série de recursos próprios, por exemplo, o Code Coverage que te permite gerar relatório de cobertura de testes com quantidade de linhas executáveis, classes, funções e métodos que existem e quantos foram testadas.

Na imagem abaixo podemos ver um exemplo deste relatório:


relatório Code Coverage

Como funciona essa mistura? 

Quando o Cake trabalha em conjunto com o PHPUnit, é quase como comprar massa de bolo pronta e só rechear. Dentro do Cake há uma ferramenta chamada Test Suit, que realiza os testes programados

Existe uma infinidade de tipos de testes pré implementados no Suit, desde roteirizados à coisas mínimas como para login e pequenos cadastros, porém são apenas "esqueletos" que precisam ser manipulados para se encaixar na necessidade do sistema que está sendo desenvolvido.

Depois de teorias, vamos "por a mão na massa" (NO LINUX!)

* pré requisito ter o Apache (não dá pra fazer um bolo sem a forma, né?!)

  • Baixe os arquivos do Cake para a pasta do apache! (Você pode baixar aqui)
  • Descompacte o arquivo baixado no diretório raiz do apache
  • Carregue o módulo mod_rewrite no apache, para permitir reescrita no diretório do CakePHP.

No prompt do Ubuntu basta digitar:

sudo a2enmod rewrite

Feito isso vá até o diretório /etc/apache2/sites-enable/default e verifique que o AllowOverride está configurado como All para o DocumentRoot, como mostra abaixo:

DocumentRoot /var/www

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
#Order allow,deny
#allow from all
</Directory>

Pronto agora podemos colocar o PHPUnit no nosso servidor. Rode os seguintes comandos:

pear upgrade PEAR
pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit

Depois adicione os repositórios do PHPUnit e atualize-os:

pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony-project.com
pear update-channels
pear upgrade-all
pear install phpunit/PHPUnit

Depois disto, "tcharam", já pode começar a desenvolver!

Dica: Aprenda a bloquear o acesso a uma página pelo navegador, usando PHP

Algumas dicas bacaninhas

Ao iniciar um projeto depois das configurações lembre de criar uma base de testes, pode fazer assim:

Na pasta app/Config/database.php acrescente as seguintes linhas:

<?php
public $test = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host'=> 'dbhost',
'login'=> 'dblogin',
'password' => 'dbpassword',
'database' => 'testes'
);

Quando implementar uma classe de teste no CakePHP esta tem que ter o mesmo nome da classe que vamos testar mais a palavra Test no final. Se uma classe se chama PostsController a classe de teste será PostsController Test e ela deverá estender de ControllerTestCase.

Para realizar o teste nesse método, nós devemos criar um método na classe PostsController Test chamado testIndex da seguinte forma:

public function testIndex(){
$results = $this->testAction('posts/index/');
debug($results);
}

O testAction executará a ação de testes.

Por fim, os testes podem parecer demandar um alto tempo durante o desenvolvimento o que faz com que muitos programadores deixem de implementá-los, porém, quando bem executados eles diminuem esforço e retrabalho, pois ao implementar os testes você já entende o fluxo de como o sistema deve se comportar, e tanto o CakePHP quando o PHPUnit, podem te ajudar nesta tarefa.



Assine nosso blog

Não perca nenhuma novidade!

Assine nosso blog

Não perca nenhuma novidade!