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
Añadir nuevo comentario