php unit y tdd

Post on 14-Apr-2017

139 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

TDD & PHPUnitPHPSevilla

Sobre Nosotros

Sergio Elvira Perez

MaxfireSenior Software Engineer @Emergya

Roberto Becerra Jimenez

RoberbSenior Software Engineer @Emergya

Índice

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

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

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).

Qué es TDD II ● El sistema que se

programa tiene que ser muy Flexible.

● Cada prueba será pequeña.

Qué es TDD III

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

Test finales

Testing via the xUnit Framework.

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.

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.

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.

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

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

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()); }}

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

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

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 }

}

UsoEjecución

phpunit path/to/test/file

Test suite

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

Test concreto

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

Ejemplo usando PHPUnit

Gracias por su atención

Más información:Sergio Elvira Perez <sergielviraperez@gmail.com>Roberto becerra Jimenez<rbecerra@emergya.com>

top related