Iniciando com SimpleTest (TDD em PHP)
Salve pessoal,
Vamos iniciar hoje uma pequena jornada à terras que possivelmente muita gente só viu/leu em sites especializados e muito pouco comentadas em PHP: a terra do desenvolvimento orientado a testes, ou TDD.
Inicialmente isso parece meio louco: afinal, você sempre testa DEPOIS de escrever seus programas ou durante, enquanto debuga tudo, correto ? Mas com o passar do tempo, a verdadeira natureza e vantagem do TDD, quando aplicada corretamente, se faz presente.
Hoje em dia, existem várias frameworks que auxiliam nessa tarefa de escrever testes. O foco aqui é algo que poucos sites (principalmente em português) abordam de forma prática que é o uso da SimpleTest, uma framework para testes unitários que vem ganhando o espaço antes ocupado pelo PHPUnit.
Para ler o artigo completo, acesse http://leohackin.com.br/blog/2009/07/iniciando-com-o-simpletest.
Fala hackin,
Muito bom o post, abordagem legal… mas eu achei meio trabalhoso.. não sei se o exemplo foi o culpado…
Sei que o teste é FUNDAMENTAL, e acredito que se existam classes que me ajudem a testar show de bola, ou até uma IDE calaz de faze-lo…oO
Mas veja o que pensei, vou testar se uma CLASSE está OK, o que vc fez… implementou uma classe de teste extendendo da classe a ser testada… ok.. ai vc disse veja se (1,1) vai dar 2… ok… depois vc testou se não passar numero (1,”A”) vai dar false… ok…. mas eu tive que escrever toda uma classe de teste, extender esse classe, criar o método para testar chamar um método de terceiro…
Nesse exemplo o menos custoso seria um arquivo teste.php requerendo a classe, e rodando um var_export(soma(1,1)) e ve se retorna 2.. ou var_export(soma(1,”A”)) e ve se retorna false..
o custo da escrita é muito menor…
E acredito que as classes venham a ser muito mais complexas que essa.. banco de dados, verificações de valores tomadas de decisão etc.. etc..
Não sei, mas olhando esse exemplo e o “trabalho” que tiria em uma classe tão simples, só para ver se retorna 2 ou false ….
posso não ter entendido muito bem, pois li com muita pressa, mas não me vejo testando minhas classes com simpleTest nesse momento…
Fala pra nois…..
Salve Gersão,
Vamos por partes:
1) A SimpleTest vai MUITO além de testes unitários: quando chegarmos em web tests, que checam e testam até a navegação do cara, você vai entender porque da adoção de uma framework e não do uso de “soluções caseiras” por causa da economia de 3 ou 4 linhas.
2) O que vamos ter de diferença ai é apenas umas 3 ou 4 linhas: você está esquecendo de todo o tratamento do assert (em dizer onde deu erro, que erro deu e por ai vai), da exibição estruturada desses erro. E mais, imagine agora você trabalhando com uns 4 ou 5 asserts: imagina só a quantidade de IFs na sua aplicacação (risos) e principalmente do encadeamento lógico de verificação dos erros.
3) Imagine que você tem mais de 10 tipos de asserts: imagina agora escrever código para esses 10 sempre ou mesmo fazer mais uma biblioteca para tratar esses tipos de asserção, que vão de verificação de igualdade à uso de ERs.
4) A adoção de uma framework tem toda a filososia TDD por trás, seja vc trabalhar com o PHPUnit, SimpleTest ou qualquer uma que te traga um modo padronizado, estruturado e inteligente de testes unitários onde vc tem que se preocupar apenas com a lógica do teste, e não em modos de exibição dos resultados, chains de asserções e tudo mais.
Enfim, as coisas no início ficam meio turvas mas tenho certeza que quando a TDD entrar na sua cabeça como entrou na minha, você vai mudar de idéia e filosofia. =) Eu pensava bastante também sobre essas coisas e depois que vc começa a codar, você vai ter idéia do quanto vc vai deixar de codar amanhã pelo que tá codando hoje. aheu auehau ehaheauauhe
Deixar de usar uma framework já bem madura e usada por um monte de gente para escrever uma solução caseira é tiro no pé e ir contra a maré. =)
O post ficou LONGO exatamente para ser mais didático, porque de teste mesmo eu escrevi pouquissimo.
Simbora.
Em tempo, a classe do caso de teste extende uma classe da SimpleTest e não a nossa propria classe. Essa classe do ST tem toda a lógica para execução dos testes e blablabla.