SlideShare una empresa de Scribd logo
1 de 36
Ganhando tempo com Casos de Testes Michael Castillo Granados [email_address] http://dgmike.com.br
Já se sentiu sem saber onde está o erro de sua aplicação? Calma! Isso é mais normal do que parece!
Tenho uma solução para seus problemas! Test-Driven Development
Por que usar? ,[object Object],[object Object],[object Object],[object Object]
O que você precisa? Suite de testes estável: Php_Unit SimpleTest Coragem Bom Senso
Escrevendo os primeiros testes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Escrevendo os primeiros testes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Escrevendo os primeiros testes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],O módulo de testes deve extender uma classe especial  da  SimpleTest , neste caso:  UnitTestCase
Escrevendo os primeiros testes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],O método deve começar com  test
Escrevendo os primeiros testes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],assertEqual  verifica se o resultado é igual ao esperado: 11
O primeiro resultado Fatal error:  Call to undefined function  soma() in  calculadora_test.php  on line 6 Isto acontece porque a função  soma  ainda não existe
Resolvendo o problema ,[object Object],[object Object],[object Object],[object Object],Uma forma simples de resolver, nada de resolver coisas a mais
Resultado ,[object Object],[object Object]
Você ainda pode rodar os testes no seu navegador Falha Sucesso
Vamos complicar um pouco? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
E o resultado dos testes muda um pouquinho... ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Métodos que podemos verificar ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Ao todo, temos 18 métodos de verificação unitária no SimpleTest
Verificando um erro ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Antes e depois de executar testes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Brincando com o banco de dados ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Tomando como base a seguinte classe de manipulação de Banco de dados
E a seguinte tabela do banco Tabela usuario com  primary_key  em  id
Escrevemos o seguinte teste include_once  ( 'simpletest/autorun.php' ); include_once  ( 'db.php' ); include_once  ( 'usuario.php' ); class  UsuarioTest  extends  UnitTestCase { var   $ db ; function  setUp() { $ this ->db = new Db; $ this ->db->clear( 'usuarios' ); } function  testNovoUsuario() { $ usuario = new Usuario(array ( 'nome'   =>  'Michael' , 'idade'  =>  24 , 'sexo'   =>  'masculino' , 'site'   =>  'http://dgmike.com.br' , )); $ this ->assertEqual( $ this ->db->total( 'usuarios' ),  1 ); } }
Escrevemos o seguinte teste include_once  ( 'simpletest/autorun.php' ); include_once  ( 'db.php' ); include_once  ( 'usuario.php' ); class UsuarioTest extends UnitTestCase { var $db; function setUp() { $this->db = new Db; $this->db->clear('usuarios'); } function testNovoUsuario() { $usuario = new Usuario(array ( 'nome'  => 'Michael', 'idade' => 24, 'sexo'  => 'masculino', 'site'  => 'http://dgmike.com.br', )); $this->assertEqual($this->db->total('usuarios'), 1); } } Incluimos os arquivos: - autorun da simpletest - classe de banco de dados - classe Usuário (que iremos testar)
Escrevemos o seguinte teste include_once ('simpletest/autorun.php'); include_once ('db.php'); include_once ('usuario.php'); class UsuarioTest extends UnitTestCase { var $db; function  setUp() { $ this ->db = new Db; $ this ->db->clear( 'usuarios' ); } function testNovoUsuario() { $usuario = new Usuario(array ( 'nome'  => 'Michael', 'idade' => 24, 'sexo'  => 'masculino', 'site'  => 'http://dgmike.com.br', )); $this->assertEqual($this->db->total('usuarios'), 1); } } Ao inicializar, o banco de dados (de testes) é limpo. Podemos inserir também dados de teste caso necessário.
Escrevemos o seguinte teste include_once ('simpletest/autorun.php'); include_once ('db.php'); include_once ('usuario.php'); class UsuarioTest extends UnitTestCase { var $db; function setUp() { $this->db = new Db; $this->db->clear('usuarios'); } function  testNovoUsuario() { $ usuario = new Usuario(array ( 'nome'   =>  'Michael' , 'idade'  =>  24 , 'sexo'   =>  'masculino' , 'site'   =>  'http://dgmike.com.br' , )); $ this ->assertEqual( $ this ->db->total( 'usuarios' ),  1 ); } } Ao usar a classe  Usuario  nosso banco de dados deve adicionar um registro, logo o total de usuários deve ser  1 .
Banco de dados sempre é uma dor de cabeça! ,[object Object],[object Object]
Duck typing: usando mockups ,[object Object],class  BancoPato { function  query() {} function  numRows() {} } // Gerando o pato Mock :: generate ('BancoPato'); $ banco   = new  MockBancoPato (); // Setando o retorno do método query do meu // objeto de manipulação de banco de dados Pato $ banco ->setReturnValue( 'query' ,  true );
Testes diferentes para retornos diferentes da função  query class  PatoTest  extends  UnitTestCase { function  setUp() { global  $banco, $pato; $banco =  new  MockBancoPato(); $pato =  new  Pato(); } function  testPato() { global  $banco, $pato; $banco->setReturnValue( 'query' ,  true ); $this->assertEqual( 'Voce inseriu um pato com sussesso!' , $pato->insert( array  ( 'Rodrigo' ))); } function  testPatoInvalido() { global  $banco, $pato; $banco->setReturnValue( 'query' ,  false ); $this->assertEqual( 'Ops! Ocorreram falhas ao tentar adicionar um pato' , $pato->insert( array  ( 'Rodrigo' ))); } }
Testando a Web ,[object Object],[object Object],[object Object],[object Object],[object Object]
Um exemplo clássico
WebTestCase <?php include_once  ( 'simpletest/web_tester.php' ); class  LoginTest  extends  WebTestCase { function  setUp() { $ db  =  new  Db; $ db ->clear( 'usuarios' ); $ usuario  =  new  Usuario( array  ( 'nome'   =>  'Michael' , 'idade'  => 24, 'sexo'   =>  'masculino' , 'site'   =>  'http://dgmike.com.br' , )); } function  testLoginErrado () { $ this ->get( 'http://localhost/phpconference/exemplos/login.php' ); $ this ->assertTrue($ this ->setField( 'nome' ,  'Augusto' )); $ this ->clickSubmit( 'Login' );  // Clicamos no botão submit $ this ->assertText( 'Login Invalido' );  // Verificamos se o texto existe } }
WebTestCase <?php include_once ('simpletest/web_tester.php'); class LoginTest extends WebTestCase { function setUp() { $db = new Db; $db->clear('usuarios'); $usuario = new Usuario(array ( 'nome'  => 'Michael', 'idade' => 24, 'sexo'  => 'masculino', 'site'  => 'http://dgmike.com.br', )); } function  testLoginErrado () { $ this ->get( 'http://localhost/phpconference/exemplos/login.php' ); $ this ->assertTrue($ this ->setField( 'nome' ,  'Augusto' )); $ this ->clickSubmit( 'Login' );  // Clicamos no botão submit $ this ->assertText( 'Login Invalido' );  // Verificamos se o texto existe } } É aqui que acontece a mágica. Fazemos o script navegar como se fosse o usuário. E nada mais de testar na mão para ver se o formuário está correto.
Tem que rodar os testes separados? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mas Mike, não é mais lento escrever tanto teste? NÃO!
Então... onde ganho? ,[object Object],[object Object],[object Object],[object Object],[object Object]
Onde encontrar?

Más contenido relacionado

La actualidad más candente

Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7iMasters
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Exercicios sequenciais
Exercicios sequenciaisExercicios sequenciais
Exercicios sequenciaisMirlem Pereira
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_javaMirlem Pereira
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPLuis Gustavo Almeida
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraValberto Carneiro
 
Curso de Shell Script 10/11
Curso de Shell Script 10/11Curso de Shell Script 10/11
Curso de Shell Script 10/11Rodrigo Silva
 
Exercícios da Aula de LAB 02
Exercícios da Aula de LAB 02Exercícios da Aula de LAB 02
Exercícios da Aula de LAB 02thomasdacosta
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 

La actualidad más candente (20)

Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
Design patterns
Design patternsDesign patterns
Design patterns
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Aula3
Aula3Aula3
Aula3
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Exercicios sequenciais
Exercicios sequenciaisExercicios sequenciais
Exercicios sequenciais
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
 
Operadores Java
Operadores JavaOperadores Java
Operadores Java
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração segura
 
Curso de Shell Script 10/11
Curso de Shell Script 10/11Curso de Shell Script 10/11
Curso de Shell Script 10/11
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Exercícios da Aula de LAB 02
Exercícios da Aula de LAB 02Exercícios da Aula de LAB 02
Exercícios da Aula de LAB 02
 
TDD
TDDTDD
TDD
 
BDD com Rails
BDD com RailsBDD com Rails
BDD com Rails
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 

Similar a Ganhando tempo com casos de testes

Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Testes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQLTestes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQLDiogo Biazus
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3Jose Berardo
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07Yuri Bispo
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidademetzen
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage apiSuissa
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009Rafael Dohms
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 

Similar a Ganhando tempo com casos de testes (20)

Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Testes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQLTestes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQL
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07
 
JavaScript
JavaScriptJavaScript
JavaScript
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Aula5
Aula5Aula5
Aula5
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
Minicurso php
Minicurso phpMinicurso php
Minicurso php
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Tema 2 | Linguagem PHP Básico (I)
Tema 2 | Linguagem PHP Básico (I)Tema 2 | Linguagem PHP Básico (I)
Tema 2 | Linguagem PHP Básico (I)
 
Javascript
JavascriptJavascript
Javascript
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 

Más de Michael Castillo Granados

Más de Michael Castillo Granados (8)

Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
Docker compose
Docker composeDocker compose
Docker compose
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
Design patterns: resolvendo problemas comuns (ruby)
Design patterns: resolvendo problemas comuns (ruby)Design patterns: resolvendo problemas comuns (ruby)
Design patterns: resolvendo problemas comuns (ruby)
 
Transformando o wp em uma loja virtual
Transformando o wp em uma loja virtualTransformando o wp em uma loja virtual
Transformando o wp em uma loja virtual
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
 
Da Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualDa Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtual
 

Ganhando tempo com casos de testes

  • 1. Ganhando tempo com Casos de Testes Michael Castillo Granados [email_address] http://dgmike.com.br
  • 2. Já se sentiu sem saber onde está o erro de sua aplicação? Calma! Isso é mais normal do que parece!
  • 3. Tenho uma solução para seus problemas! Test-Driven Development
  • 4.
  • 5. O que você precisa? Suite de testes estável: Php_Unit SimpleTest Coragem Bom Senso
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. O primeiro resultado Fatal error: Call to undefined function soma() in calculadora_test.php on line 6 Isto acontece porque a função soma ainda não existe
  • 12.
  • 13.
  • 14. Você ainda pode rodar os testes no seu navegador Falha Sucesso
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21. E a seguinte tabela do banco Tabela usuario com primary_key em id
  • 22. Escrevemos o seguinte teste include_once ( 'simpletest/autorun.php' ); include_once ( 'db.php' ); include_once ( 'usuario.php' ); class UsuarioTest extends UnitTestCase { var $ db ; function setUp() { $ this ->db = new Db; $ this ->db->clear( 'usuarios' ); } function testNovoUsuario() { $ usuario = new Usuario(array ( 'nome' => 'Michael' , 'idade' => 24 , 'sexo' => 'masculino' , 'site' => 'http://dgmike.com.br' , )); $ this ->assertEqual( $ this ->db->total( 'usuarios' ), 1 ); } }
  • 23. Escrevemos o seguinte teste include_once ( 'simpletest/autorun.php' ); include_once ( 'db.php' ); include_once ( 'usuario.php' ); class UsuarioTest extends UnitTestCase { var $db; function setUp() { $this->db = new Db; $this->db->clear('usuarios'); } function testNovoUsuario() { $usuario = new Usuario(array ( 'nome' => 'Michael', 'idade' => 24, 'sexo' => 'masculino', 'site' => 'http://dgmike.com.br', )); $this->assertEqual($this->db->total('usuarios'), 1); } } Incluimos os arquivos: - autorun da simpletest - classe de banco de dados - classe Usuário (que iremos testar)
  • 24. Escrevemos o seguinte teste include_once ('simpletest/autorun.php'); include_once ('db.php'); include_once ('usuario.php'); class UsuarioTest extends UnitTestCase { var $db; function setUp() { $ this ->db = new Db; $ this ->db->clear( 'usuarios' ); } function testNovoUsuario() { $usuario = new Usuario(array ( 'nome' => 'Michael', 'idade' => 24, 'sexo' => 'masculino', 'site' => 'http://dgmike.com.br', )); $this->assertEqual($this->db->total('usuarios'), 1); } } Ao inicializar, o banco de dados (de testes) é limpo. Podemos inserir também dados de teste caso necessário.
  • 25. Escrevemos o seguinte teste include_once ('simpletest/autorun.php'); include_once ('db.php'); include_once ('usuario.php'); class UsuarioTest extends UnitTestCase { var $db; function setUp() { $this->db = new Db; $this->db->clear('usuarios'); } function testNovoUsuario() { $ usuario = new Usuario(array ( 'nome' => 'Michael' , 'idade' => 24 , 'sexo' => 'masculino' , 'site' => 'http://dgmike.com.br' , )); $ this ->assertEqual( $ this ->db->total( 'usuarios' ), 1 ); } } Ao usar a classe Usuario nosso banco de dados deve adicionar um registro, logo o total de usuários deve ser 1 .
  • 26.
  • 27.
  • 28. Testes diferentes para retornos diferentes da função query class PatoTest extends UnitTestCase { function setUp() { global $banco, $pato; $banco = new MockBancoPato(); $pato = new Pato(); } function testPato() { global $banco, $pato; $banco->setReturnValue( 'query' , true ); $this->assertEqual( 'Voce inseriu um pato com sussesso!' , $pato->insert( array ( 'Rodrigo' ))); } function testPatoInvalido() { global $banco, $pato; $banco->setReturnValue( 'query' , false ); $this->assertEqual( 'Ops! Ocorreram falhas ao tentar adicionar um pato' , $pato->insert( array ( 'Rodrigo' ))); } }
  • 29.
  • 31. WebTestCase <?php include_once ( 'simpletest/web_tester.php' ); class LoginTest extends WebTestCase { function setUp() { $ db = new Db; $ db ->clear( 'usuarios' ); $ usuario = new Usuario( array ( 'nome' => 'Michael' , 'idade' => 24, 'sexo' => 'masculino' , 'site' => 'http://dgmike.com.br' , )); } function testLoginErrado () { $ this ->get( 'http://localhost/phpconference/exemplos/login.php' ); $ this ->assertTrue($ this ->setField( 'nome' , 'Augusto' )); $ this ->clickSubmit( 'Login' ); // Clicamos no botão submit $ this ->assertText( 'Login Invalido' ); // Verificamos se o texto existe } }
  • 32. WebTestCase <?php include_once ('simpletest/web_tester.php'); class LoginTest extends WebTestCase { function setUp() { $db = new Db; $db->clear('usuarios'); $usuario = new Usuario(array ( 'nome' => 'Michael', 'idade' => 24, 'sexo' => 'masculino', 'site' => 'http://dgmike.com.br', )); } function testLoginErrado () { $ this ->get( 'http://localhost/phpconference/exemplos/login.php' ); $ this ->assertTrue($ this ->setField( 'nome' , 'Augusto' )); $ this ->clickSubmit( 'Login' ); // Clicamos no botão submit $ this ->assertText( 'Login Invalido' ); // Verificamos se o texto existe } } É aqui que acontece a mágica. Fazemos o script navegar como se fosse o usuário. E nada mais de testar na mão para ver se o formuário está correto.
  • 33.
  • 34. Mas Mike, não é mais lento escrever tanto teste? NÃO!
  • 35.