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 <[email protected]>Roberto becerra Jimenez<[email protected]>