SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Introducción
PHPUnit / TDD
¿Que es TDD?

Es una metodología de desarrollo ágil
¿Para que sirve?

Código Testeable
¿Para que sirve?

Código Robusto
¿Para que sirve?

Código Robusto
¿Cómo?

Traducción de casos
de uso a ejemplos.
¿Para que sirve?

Diseñado desde un punto de vista diferente.
¿Para que sirve?

Funcionalidad Justa … o
no?? ...
¿Cómo?

Las decisiones de diseño quedan para la fase de
desarrollo.
¿Cómo?

Escribir la especificación
¿Cómo?

Implementar el codigo para el ejemplo
¿Cómo?

Refactorizar y realizar mejoras.
Test Automáticos

  ¿Para que?
¿Cómo?

<?php

echo count($array_fixture);

echo count($array_fixture) == 1 ? "okn" : "not okn";

assertTrue(count($fixture) == 1);

function assertTrue($condition) {
   if (!$condition) {
       throw new Exception('Assertion failed.');
   }
}
¿Cómo?

<?php

class FixturesTest extends PHPUnit_Framework_TestCase {

    public function testCountFixture($array_fixture) {
      $this->assertEquals(1, count($array_fixture));
    }

}
¿Cómo?
Instalación
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com


pear install --alldeps phpunit/PHPUnit
Escribiendo un Test
<?php
// test/FixturesTest.php

require_once 'PHPUnit/Framework.php';
require_once '../Fixtures.php';

class FixturesTest extends PHPUnit_Framework_TestCase {

    public function testCountFixturesArray() {
      $fixtures = new Fixtures();
      $fixtures_array = $fixtures->generate();
      $this->assertEquals(1, count($fixtures_array));
    }

}
Data Providers
<?php
class DataTest extends PHPUnit_Framework_TestCase {
   /**
    * @dataProvider provider
    */
   public function testAdd($a, $b, $c) {
       $this->assertEquals($c, $a + $b);
   }
   public function provider() {
       return array(
          array(0, 0, 0),
          array(0, 1, 1),
          array(1, 0, 1),
          array(1, 1, 3)
       );
   }
}
Excepciones y errores
<?php

class ExceptionTest extends PHPUnit_Framework_TestCase {

    /**
     * @expectedException InvalidArgumentException
     */
    public function testException() {
        throw new InvalidArgumentException();
    }

}
Excepciones y errores
<?php

class ExpectedErrorTest extends PHPUnit_Framework_TestCase {

    /**
     * @expectedException PHPUnit_Framework_Error
     */
    public function testFailingInclude() {
        include 'not_existing_file.php';
    }

}
Afirmaciones
/**
 * Asserts that a condition is true.
 *
 * @param boolean $condition
 * @param string $message
 * @throws PHPUnit_Framework_AssertionFailedError
 */
function assertTrue($condition, $message = '')
{
    return PHPUnit_Framework_Assert::assertTrue($condition, $message);
}
Afirmaciones
/**
 * Asserts that a variable is of a given type.
 *
 * @param string $expected
 * @param mixed $actual
 * @param string $message
 * @since Method available since Release 3.5.0
 */
function assertInstanceOf($expected, $actual, $message = '')
{
    return PHPUnit_Framework_Assert::assertInstanceOf($expected, $actual, $message);
}
Afirmaciones
/**
 * Asserts that two variables are equal.
 *
 * @param mixed $expected
 * @param mixed $actual
 * @param string $message
 * @param float $delta
 * @param integer $maxDepth
 * @param boolean $canonicalize
 * @param boolean $ignoreCase
 */
function assertEquals($expected, $actual, $message = '', $delta = 0, $maxDepth = 10,
$canonicalize = FALSE, $ignoreCase = FALSE)
{
    return PHPUnit_Framework_Assert::assertEquals($expected, $actual, $message, $delta,
$maxDepth, $canonicalize, $ignoreCase);
}
Afirmaciones

PHPUnit tiene más
de   120 Asserts !!!
Afirmaciones


               Pero mejor NO las
               repasamos
               ahora !!!
setUp() y tearDown()
<?php

class FixturesTest extends PHPUnit_Framework_TestCase {

    protected $item = false;

    public function setUp() {
      $this->item = new ItemObject();
    }

    public function tearDown() {
      unset($this->item);
    }

}
Aplausos !!!

Weitere ähnliche Inhalte

Was ist angesagt?

Codificaciones c++
Codificaciones c++Codificaciones c++
Codificaciones c++
mario_10
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
cemayoral
 
Uso de operadores
Uso de operadoresUso de operadores
Uso de operadores
leyohana14
 
Cajero en C++
Cajero en C++Cajero en C++
Cajero en C++
IngridBs
 
PresentacióN 4
PresentacióN 4PresentacióN 4
PresentacióN 4
pokerpc
 

Was ist angesagt? (20)

Presentación 13 Paso por referencia
Presentación 13 Paso por referenciaPresentación 13 Paso por referencia
Presentación 13 Paso por referencia
 
Codificaciones c++
Codificaciones c++Codificaciones c++
Codificaciones c++
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
 
Semana 3 Fundamentos de Python(Funciones y Métodos)
Semana 3   Fundamentos de Python(Funciones y Métodos)Semana 3   Fundamentos de Python(Funciones y Métodos)
Semana 3 Fundamentos de Python(Funciones y Métodos)
 
Register globals
Register globalsRegister globals
Register globals
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Uso de operadores
Uso de operadoresUso de operadores
Uso de operadores
 
Funcionesclase1
Funcionesclase1Funcionesclase1
Funcionesclase1
 
Cajero en C++
Cajero en C++Cajero en C++
Cajero en C++
 
Javadoc
JavadocJavadoc
Javadoc
 
Programa 17
Programa 17Programa 17
Programa 17
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
 
Estructuras de Control Repetitivo
Estructuras de Control RepetitivoEstructuras de Control Repetitivo
Estructuras de Control Repetitivo
 
7. estructura condicional if
7.  estructura condicional if7.  estructura condicional if
7. estructura condicional if
 
Encriptacion y crackmes_en_batch_desde_0_by_xassiz
Encriptacion y crackmes_en_batch_desde_0_by_xassizEncriptacion y crackmes_en_batch_desde_0_by_xassiz
Encriptacion y crackmes_en_batch_desde_0_by_xassiz
 
PresentacióN 4
PresentacióN 4PresentacióN 4
PresentacióN 4
 
Php Basico
Php BasicoPhp Basico
Php Basico
 

Andere mochten auch

Metodologias agiles de programación
Metodologias agiles de programaciónMetodologias agiles de programación
Metodologias agiles de programación
Rafael Hernandez
 

Andere mochten auch (15)

Caso practico de_la_metodologia_agil_xp
Caso practico de_la_metodologia_agil_xpCaso practico de_la_metodologia_agil_xp
Caso practico de_la_metodologia_agil_xp
 
Android y el desarrollo ágil
Android y el desarrollo ágilAndroid y el desarrollo ágil
Android y el desarrollo ágil
 
Metodologias agiles de programación
Metodologias agiles de programaciónMetodologias agiles de programación
Metodologias agiles de programación
 
Las apps
Las appsLas apps
Las apps
 
Tutorial Android 1
Tutorial Android 1Tutorial Android 1
Tutorial Android 1
 
Manual aplicacion android
Manual aplicacion androidManual aplicacion android
Manual aplicacion android
 
Programación extrema (xp)
Programación extrema (xp)Programación extrema (xp)
Programación extrema (xp)
 
Aplicaciones para entrenar
Aplicaciones para entrenarAplicaciones para entrenar
Aplicaciones para entrenar
 
Primer Ejemplo de Proyecto en Android Studio
Primer Ejemplo de Proyecto en Android StudioPrimer Ejemplo de Proyecto en Android Studio
Primer Ejemplo de Proyecto en Android Studio
 
APLICACIONES CREADAS PARA ANDROID
APLICACIONES CREADAS PARA ANDROIDAPLICACIONES CREADAS PARA ANDROID
APLICACIONES CREADAS PARA ANDROID
 
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas AvanzadosDesarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
 
Desarrollo android - 4 - arquitectura de aplicación
Desarrollo android  - 4 - arquitectura de aplicaciónDesarrollo android  - 4 - arquitectura de aplicación
Desarrollo android - 4 - arquitectura de aplicación
 
El gran libro de android
El gran libro de androidEl gran libro de android
El gran libro de android
 
Manual programación android
Manual programación android Manual programación android
Manual programación android
 
Curso desarrollo en android
Curso desarrollo en androidCurso desarrollo en android
Curso desarrollo en android
 

Ähnlich wie Introducción a TDD y PHPUnit

Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
paulcuenca9
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
climancc
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
I LG
 

Ähnlich wie Introducción a TDD y PHPUnit (20)

Módulo de PHP
Módulo de PHPMódulo de PHP
Módulo de PHP
 
Código Bonito con PHP
Código Bonito con PHPCódigo Bonito con PHP
Código Bonito con PHP
 
sentenciareturnymetodos
sentenciareturnymetodossentenciareturnymetodos
sentenciareturnymetodos
 
Evidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPEvidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHP
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
 
EXAMEN
EXAMENEXAMEN
EXAMEN
 
Php
PhpPhp
Php
 
3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescate
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf
 
Introducción a php
Introducción a phpIntroducción a php
Introducción a php
 
32773 php-basico
32773 php-basico32773 php-basico
32773 php-basico
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 
Php
PhpPhp
Php
 
Php1
Php1Php1
Php1
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Php
PhpPhp
Php
 
Tema2 3
Tema2 3Tema2 3
Tema2 3
 

Mehr von Daniel González Cerviño (6)

Refactoring with php storm
Refactoring with php stormRefactoring with php storm
Refactoring with php storm
 
Presentación del grupo PHPMad en el codemotion madrid 2014
Presentación del grupo PHPMad en el codemotion madrid 2014Presentación del grupo PHPMad en el codemotion madrid 2014
Presentación del grupo PHPMad en el codemotion madrid 2014
 
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
 
Monolog - deSymfony unconference 2013
Monolog - deSymfony unconference 2013 Monolog - deSymfony unconference 2013
Monolog - deSymfony unconference 2013
 
Conquista la galaxia con GIT
Conquista la galaxia con GITConquista la galaxia con GIT
Conquista la galaxia con GIT
 
Varnish http cache
Varnish http cacheVarnish http cache
Varnish http cache
 

Kürzlich hochgeladen

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Kürzlich hochgeladen (11)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

Introducción a TDD y PHPUnit