Software Development Notions

PHPUnit Basics

July 13, 2020

https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/PHPUnit_Logo.svg/1200px-PHPUnit_Logo.svg.png

Introducción e instalación

Este post surge por mi deseo de iniciar en el desarrollo de tests de código PHP mediante PHPUnit, un acercamiento que sirva para asimilar conceptos básicos. ¡Empezamos!.

Lo primero que necesitamos es instalar PHPUnit en el proyecto, y ésto lo realizaremos gracias a composer.

composer require --dev phpunit/phpunit ^latest

Trás esto, en nuestra primera clase de test, debemos extender de TestCase, contenido en:

vendor → phpunit → framework

ahora es momento de hacer la primera aserción

use PHPUnit\Framework\TestCase;
class Test extends TestCase
{ 
	public function test_render() { $welcome = "hola"; $this->assertEquals($welcome,"hola"); }
}

Como podemos ver, se ha extendido de la clase TestCase, y se ha realizado una aserción para comprobar simplemente que hemos realizado bien el proceso de instalar phpunit y de empezar a usarlo bien. Para probar si el test ejecuta correctamente, lo podemos hacer mediante la ayuda del IDE a elección, o mediante el siguiente comando en el que se le indica ruta de phpunit, ruta de archivo de test y formato de salida(opcional):

vendor/bin/phpunit SlugTest.php --color

PHPUnit con Laravel

Si vamos a trabajar con Laravel, la integración de PHPUnit ya viene instalada por defecto. El archivo phpunit.xml de la carpeta vendor, es un archivo de configuración en el que ya vienen predefinidas las propiedades como la salida a color que especificabamos antes (—color), o incluso dos directorios definidos para test (dentro de ) como son Unit y Feature.

Aserciones

La idea no es otra que recopilar ciertas aserciones con el fin de ver la forma en que trabaja el framework para realizar pruebas. En todas las pruebas, se ejecutaran métodos de aserciones haciendo referencia a “$this”, que se refiere a la clase actual que extiende de TestCase, por lo que tiene los métodos heredados de PHPUnit. Por otro lado, cabe destacar que en cada método de prueba, se debe usar la nomenclatura “test*” para que se interprete como un test.

<?php

use PHPUnit\Framework\TestCase;

class SimpleTest extends TestCase
{
    /*TRUE OR FALSE*/
    public function test_true()
    {
        $this->assertTrue(true);
    }

    public function test_false()
    {
        $this->assertFalse(false);
    }

    /*EQUALS OR SAME*/
    public function test_equals()
    {
        $this->assertEquals(10, "10");
    }

    public function test_not_equals()
    {
        $this->assertNotEquals(10, 20);
    }

    public function test_same()
    {
        $this->assertSame(10, 10);
    }

    public function test_not_same()
    {
        $this->assertNotSame(10, "10");
    }

    /*TYPES*/
    public function test_types()
    {
        $this->assertIsArray([1, 2, 3]);
    }

    public function test_empty()
    {
        $this->assertEmpty("");
        $this->assertEmpty([]);
    }

    /*ARRAYS*/
    public function test_count()
    {
        $this->assertCount(2, [1, 2]);
    }

    public function test_hash_key()
    {
        $this->assertArrayHasKey("color", ["color" => "azul"]);
    }
}

Welcome to my blog about Software Development! I would like to invite you to learning with me 👨‍💻

Search all posts