SlideShare una empresa de Scribd logo
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 !!!

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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
 

Destacado

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

Destacado (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
 

Similar a 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
 

Similar a 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
 
EXAMEN
EXAMENEXAMEN
EXAMEN
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
 
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
 

Más de 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
 

Último

PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docxPRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
encinasm992
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 

Último (20)

Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
 
herramientas informaticas mas utilizadas
herramientas informaticas mas utilizadasherramientas informaticas mas utilizadas
herramientas informaticas mas utilizadas
 
lenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometrialenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometria
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docxPRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.
 
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 

Introducción a TDD y PHPUnit