Neste post vamos abordar o Test Driven Development (TDD) em PHP, que é um dos principios core do XP e está disponivel nativo para linguagem java no netbeans. Entretanto, para habilitar essa ferramenta para o PHP no ambiente Windows devemos fazer algumas configurações no ambiente que seguem:
- Instalar o NetBeans;
- Instalar o Xampp;
- Configurar o PHPUnit pelo pear no xampp com os seguintes comandos:
- Abrir o Shell;
- Digitar “pear config-set auto_discover 1”
- Digitar “pear install pear.phpunit.de/PHPUnit”
- Agora o PHPUnit já está configurado na pasta c:\xampp\php\
- Baixar o arquivo phpunit.phar em https://phar.phpunit.de/phpunit.phar
- Baixar o arquivo phpunit-skelgen.phar em https://phar.phpunit.de/phpunit-skelgen.phar
- Salvar os dois arquivos em c:\xampp\php\
- Para configurar o phpunit no netbeans faça o seguinte:
- Vá em ferramentas;
- Em opções aponte os arquivos conforme as imagens abaixo:
Agora o NetBeans já está configurado para aceitar projetos com a criação de classes de testes. A proxima etapa é criar um novo projeto PHP. Com o projeto criado deve-se criar a classe PHP que será desenvolvida a partir de testes. Agora deve-se criar os testes. Clique com o botão direito sobre a pasta “Arquivos de Código-Fonte” ir em “Ferramentas” e depois “Criar Testes”.
Deve-se criar uma pasta de testes dentro do projeto, onde serão geradas as classes de testes pelo skelgen, e durante o assistente de criação dos testes assinalar a opção de utilizar o PHPUnit.
O ultimo passo é criar a classe de testes, que é criada automaticamente clicando com o botão direito em cima do arquivo da classe PHP, que foi criada anteriormente e onde serão desenvolvidos os métodos, ir em “Ferramentas” e depois “Criar Testes”.
Agora o arquivo o testes já foi criado, só tem que ter cuidado de sempre começar o método de testes começando com “testAlgumaCoisa”, segue abaixo uma sugestão de código para as classes onde estarão os métodos e onde estarão os testes:
Salario.php
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of Salario
*
* @author GUSTAVO
*/
class Salario {
//put your code here
public function index($bonus = null){
$salario = 1500.35;
if($bonus){
$salario += $bonus;
}
return $salario;
}
public function desconto($salario){
$desconto = 8;
if(($salario > 1317.07) and ($salario < 2195.13)){
$desconto = 9;
} elseif($salario > 2195.12){
$desconto = 11;
}
return $desconto;
}
public function descontoINSS($salario) {
if($salario > 4390.24){
$salario = 4390.24;
}
$percentual = $this->desconto($salario);
$desconto = $salario * $percentual / 100;
return number_format($desconto, 2);
}
}
SalarioTest.php
<?php
require_once "../Salario.php";
/**
* Generated by PHPUnit_SkeletonGenerator on 2014-10-21 at 14:01:05.
*/
class SalarioTest extends PHPUnit_Framework_TestCase
{
/**
* @covers Salario::index
* @todo Implement testIndex().
*/
public function testIndex(){
$salario = new Salario();
$this->assertEquals(1500.35, $salario->index());
}
public function testIndexComBonus(){
$salario = new Salario();
$this->assertEquals(1550.35, $salario->index(50));
}
public function testDesconto(){
$salario = new Salario();
$this->assertEquals(11, $salario->desconto(10000));
}
public function testValorINSSMinimo(){
$salario = new Salario();
$this->assertEquals(80, $salario->descontoINSS(1000));
}
public function testValorINSSMedio(){
$salario = new Salario();
$this->assertEquals(180, $salario->descontoINSS(2000));
}
public function testValorINSSAlto(){
$salario = new Salario();
$this->assertEquals(440, $salario->descontoINSS(4000));
}
public function testValorINSSTeto(){
$salario = new Salario();
$this->assertEquals(482.93, $salario->descontoINSS(9390.24));
}
}