php unit y tdd

21
TDD & PHPUnit PHPSevilla

Upload: emergya

Post on 14-Apr-2017

144 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: PHP Unit y TDD

TDD & PHPUnitPHPSevilla

Page 2: PHP Unit y TDD

Sobre Nosotros

Sergio Elvira Perez

MaxfireSenior Software Engineer @Emergya

Roberto Becerra Jimenez

RoberbSenior Software Engineer @Emergya

Page 3: PHP Unit y TDD

Índice

● TDD○ Qué es○ Ciclo de desarrollo○ Tests finales○ FDD vs TDD

● PHPUnit○ Qué es○ Instalación○ Uso○ Ejemplos

Page 4: PHP Unit y TDD

Qué es TDD● Desarrollo guiado por pruebas de software, o

Test-driven development (TDD) es una práctica de ingeniería de software que involucra otras dos prácticas:

○ Escribir las pruebas (Test First Development).○ Refactorización (Refactoring).

Page 5: PHP Unit y TDD

Qué es TDD II ● El sistema que se

programa tiene que ser muy Flexible.

● Cada prueba será pequeña.

Page 6: PHP Unit y TDD

Qué es TDD III

Page 7: PHP Unit y TDD

Ciclo de desarrollo1. Elegir un requisito.

2. Escribir una prueba

3. Verificar que la prueba falla

4. Escribir la implementación

5. Ejecutar las pruebas automatizadas

6. Eliminación de duplicación (Refactorizar)

7. Actualización de la lista de requisitos

Page 8: PHP Unit y TDD

Test finales

Testing via the xUnit Framework.

Page 9: PHP Unit y TDD

FDDEs un enfoque de desarrollo ágil de software desarrollado por Jeff De Luca y Peter Coad. Los desarrolladores se agrupan en dos tipos, "dueños de clases" o "programadores jefe".

El proceso del diseño y construcción comprende cinco fases:

1. Desarrollar un modelo global;2. Construir una lista de funcionalidades;3. Planificar por funcionalidad;4. Diseñar por funcionalidad;5. Construir por funcionalidad.

Page 10: PHP Unit y TDD

TDD vs FDD (ventajas)

TDD FDD1.- La minimización del número de defectos que llegan al software en fase de producción.

1.- Rápida respuesta a cambios de requisitos

2.- Optimización en ejecución de funciones 2.- Trabajo conjunto entre el cliente y el equipo de desarrollo

3.- La producción de software modular 3.- Minimiza los costos frente a cambios.

Page 11: PHP Unit y TDD

TDD vs FDD (inconvenientes)

TDD FDDInterfaces Gráfica de usuario (GUIs), solución parcial. Falta de documentación del diseño.

Ya que no todos miden los tiempos de proyecto Problemas derivados de la comunicación oral

Bases de datos. Falta de reusabilidad.

Page 12: PHP Unit y TDD

Qué es PHPUnitPHPUnit es un framework de testing para PHP

¿Por qué usar PHPUnit?“Todos los programadores cometen errores, pero la diferencia entre los buenos programadores y los malos programadores es que los buenos programadores prueban su código para encontrar esos errores lo más pronto posible“

Sebastian Bergmann creador de PHPUnit

Page 13: PHP Unit y TDD

Instalaciónwget https://phar.phpunit.de/phpunit.phar

chmod +x phpunit.phar

sudo mv phpunit.phar /usr/local/bin/phpunit

phpunit --version

Composer"require-dev": {

"phpunit/phpunit": "5.6.*"

}

}

composer.json

composer install

Page 14: PHP Unit y TDD

Uso<?phpclass Money{ private $amount;

public function __construct($amount) { $this->amount = $amount; }

public function getAmount() { return $this->amount; }

public function negate() { return new Money(-1 * $this->amount); }}

<?phpuse PHPUnit\Framework\TestCase;

class MoneyTest extends TestCase{ // ...

public function testCanBeNegated() { // Arrange $a = new Money(1);

// Act $b = $a->negate();

// Assert $this->assertEquals(-1, $b->getAmount()); }}

Page 15: PHP Unit y TDD

UsosetUp()Contiene el código que se va a ejecutar justo antes de los tests

tearDown()Contiene el código que se va a ejecutar justo después de los tests

Page 16: PHP Unit y TDD

UsoAssertionsExiste una gran cantidad de Assertions con los que podremos comprobar gran cantidad de situaciones en nuestros tests.Sólo veremos algunos ejemplos en esta presentación, aquí podemos encontrar todos los existentes.

● assertEquals(mixed $expected, mixed $actual[, string $message = '']) Se lanza un error con el mensaje $message en el caso de que $actual sea diferente a $expected.

● assertFalse(bool $condition[, string $message = ''])Se lanza un error con el mensaje $message en caso de que $condition no sea false.

● assertCount($expectedCount, $haystack[, string $message = ''])Se lanza un error con el mensaje $message en caso de que el array $haystack no contenga el número de elementos $expectedCount

Page 17: PHP Unit y TDD

Uso<?phpuse PHPUnit\Framework\TestCase;

class XTest extends TestCase{

public function setUp(){

// defines initial state

}

public function tearDown(){

// defines final state

}

public function test1() {

// … assertions }

public function testN() {

// … assertions }

}

Page 18: PHP Unit y TDD

UsoEjecución

phpunit path/to/test/file

Test suite

phpunit path/to/test/file --filter test

Test concreto

Page 19: PHP Unit y TDD

UsoEjecución

$~ phpunit tests/NumberTest.php

PHPUnit 4.8.24 by Sebastian Bergmann and contributors.

.........................

Time: 208 ms, Memory: 14.00Mb

OK (25 tests, 175 assertions)

Resultados

Page 20: PHP Unit y TDD

Ejemplo usando PHPUnit

Page 21: PHP Unit y TDD

Gracias por su atención

Más información:Sergio Elvira Perez <[email protected]>Roberto becerra Jimenez<[email protected]>