Desenvolver orientado a testes não é simples, principalmente por que TDD é uma técnica e nem todos estão aptos a aprender. É preciso disciplina para programar assim, e inicialmente não se tem muitos benefícios e a velocidade para quem está começando é baixa.
Mas os benefícios a longo prazo são incontáveis como códigos mais simples, códigos cobertos por testes, e integração contínua. Além disso fica mais fácil novos desenvolvedores saberem do que se trata toda a aplicação apenas lendo os testes e vendo por que eles foram escritos. Desenvolvimento orientado a testes trazem muitos benefícios e é uma boa prática de desenvolvimento.
Eu já postei aqui como se instala o PHPUnit no Windows e no Linux usando o PEAR. Agora vou demonstrar como por onde você pode começar a desenvolver orientado a testes de uma maneira simples, sem muitos rodeios. Já postei como integrar o PHPUnit e o PHPSpec ao CodeIgniter e muita gente me perguntou “Mas como testar?”, espero responder algumas perguntas neste artigo.
No artigo, eu indiquei para incluir arquivos como Base5.php, Commons.php entre outros, mas eu não fiz isso sem base, primeiro escrevi uma base de testes:
require_once 'config.php';
require_once 'PHPUnit/Framework.php';
class IncludeFilesTest extends PHPUnit_Framework_TestCase {
public $tasks;
public function testIncludeBaseClass() {
ini_set('include_path', ini_get('include_path') .':/home/cairo/workspace/chkList/system/codeigniter/');
$this->assertEquals(1, include_once('Base5.php'));
}
public function testIncludeControllerClass() {
ini_set('include_path', ini_get('include_path') .':/home/cairo/workspace/chkList/system/libraries/');
$this->assertEquals(1, require_once('Controller.php'));
}
public function testIncludeTasksClass() {
ini_set('include_path', ini_get('include_path') .':/home/cairo/workspace/chkList/system/app/controllers/');
$this->assertEquals(1, require_once('tasks.php'));
}
public function testIncludeCommonFunctions() {
$this->assertEquals(1, require_once('Common.php'));
}
public function testPossibleCreateTasksControllerObject() {
$this->tasks = new Tasks;
$this->assertType('Tasks', $this->tasks);
}
}
Após todos esses testes estarem funcionando corretamente, é que escrevi o arquivo ‘config.php’ :).
A lógica é essa, escreva testes, faça-os falhar, refatore seu código, refaça os testes e refatore seus códigos até os testes passarem. Não inicie codificando, inicie pelos testes, teste sempre, teste tudo!
Eu demorei muito tempo para colocar esse artigo no ar, principalmente pela falta de tempo que tive ;), vamos testar todo os nossos códigos.
Até a próxima!