PhpUnit comienza lo bueno TTD (test driven development)

Enviado por Francisco Carrizales el Sáb, 09/02/2019 - 12:57
ejemplo-phpunit

Ahora si, comenzamos lo bueno, como mencione en una entrada anterior, existe una practica en la cual comienzas a escribir las pruebas, vez y te aseguras que falle dicha prueba, a continuación haces lo posible para que se cumpla. Repites este proceso hasta  que sientas que cubre los aspectos mas importe del desarrollo.
En la entrada anterior concluimos la instalación y dejamos una clase con una prueba lista.
 

<?php

use PHPUnit\Framework\TestCase;

class CalculadoraTest extends TestCase
{
    public function testSuma(): void
    {   
        $calculadora = new Calculadora();
        
        $this->assertTrue(true);
    }
}

Con la premisa de hacer la prueba primero, comenzaremos las prueba de nuestra clase Calculadora.
 

<?php

use PHPUnit\Framework\TestCase;

class CalculadoraTest  extends TestCase
{
    public function testSuma()
    {   
        $calculadora = new Calculadora();

        $resultado = $calculadora->suma(5,5);

        $this->assertEquals($resultado , 10 );
    }
}

Lo cual nos va a lanzar que hay un error al ejecutar el comando.

php phpunit --bootstrap src/autoload.php  tests/
Failed asserting that 10 matches expected null.

/var/www/html/tests/calculadoraTest.php:13

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.

Con esto completamos el primer requerimiento de la métodologia, que es hacer la prueba  y ver que falle.  El siguiente paso es hacer la lógica para que sume dos números.

<?php 

class Calculadora
{
    public function suma($a, $b)
    {
        return $a + $b;
    }
}

Volvemos a ejecutar la prueba nuevamente.

root@6244f4b8f748:/var/www/html# php phpunit --bootstrap src/autoload.php  tests/
PHPUnit 8.0.1 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 1.01 seconds, Memory: 10.00MB

Por lo tanto podemos ir continuando agregando pruebas, testear las validaciones que sean número quizas esta sean pruebas muy rebuscadas pero por algo se tiene que iniciar comparto el ejemplo.

Agrego dos nuevas pruebas, para verificar  que los parámetros sean valores numéricos

<?php

use PHPUnit\Framework\TestCase;

class CalculadoraTest extends TestCase
{
    public function testSuma(): void
    {
        $calculadora = new Calculadora();

        $resultado = $calculadora->suma(5, 5);

        $this->assertEquals($resultado, 10);
    }


    public function testSumaSoloNumerosA(): void
    {
        $calculadora = new Calculadora();

        try {
            $resultado = $calculadora->suma(5, "deberialanzar una excelcion");

            $this->assertTrue(false, "Debio lanzar una exception");
        } catch (NumValuesException $e) {
            $this->assertTrue(true, "Debio lanzar una exception");
        }
    }

    public function testSumaSoloNumerosB(): void
    {
        $calculadora = new Calculadora();

        try {
            $resultado = $calculadora->suma("deberialanzar una excelcion", 5);

            $this->assertTrue(false, "Debio lanzar una exception");
        } catch (NumValuesException $e) {
            $this->assertTrue(true, "Debio lanzar una exception");
        }
    }
}
<?php 

class NumValuesException extends Exception
{
}


class Calculadora
{
    public function suma($a, $b)
    {
        if (!is_numeric($a)) {
            throw new NumValuesException("Error Processing Request", 1);
        }

        if (!is_numeric($b)) {
            throw new NumValuesException("Error Processing Request", 1);
        }

        return $a + $b;
    }
}


Recomendación hay que crear excepciones personalizadas ya que phpunit las utiliza para saber si hay un error. Hay distintos tipos de assert. En el ejemplo solo utilice 3 assertTrue y assertEquals, pero hay muchos disponibles para ser usados. Hay que notar que se pueden poner mensajes en el ultimo parámetros para indicar o ayudar por que es el error.

Aún falta, muchas cosas por aprender: 

  • Realizar pruebas usando una fuente de datos usando comentarios en funciones.
  • Ver como inicializar las pruebas
  • Integrar con cakephp
  • Pruebas con base de datos en cakephp
  • Probar escenarios muy usando datos de prueba en cakephp
     

Etiquetas

Añadir nuevo comentario

HTML Restringido

  • Etiquetas HTML permitidas: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.