Live #13 - PHP Orientado a Objetos
PHP Orientado a Objetos

Como criar testes automatizados usando PHPUnit

Antes de mais nada, tudo que vou explicar aqui pode ser encontrado na Documentação oficial do PHPUnit (https://phpunit.readthedocs.io/pt_BR/latest/) mas vou me esforçar ao máximo para simplificar o entendimento neste post, fiz também um vídeo no meu canal mostrando na pratica e vou deixar também abaixo.

Pré-requisitos:
PHP 7 ou superior.
Existem formas de instalar o PHPUnit para ser usado globalmente no sistema operacional, mas eu normalmente opto por instalar como dependência de desenvolvimento usando o composer. Caso queira instalar no sistema use link a seguir: https://phpunit.readthedocs.io/pt_BR/latest/installation.html#php-archive-phar.

1 - criando o projeto

Vou criar uma pasta simples e em seguida rodar o comando

composer init

Vá dando enter e aceitando tudo, com isso o composer já deve criar uma pasta chamada “src”

Depois disso crie uma pasta chamada “tests” na página raiz do projeto, neste momento sua pasta do projeto deve estar algo parecido com isto.

Após este ultimo passo vamos instalar o PHPUnit usando o comando composer abaixo

composer require --dev phpunit/phpunit ^6.4

2 - escrevendo nosso primeiro teste

PHPUnit instalado agora vamos escrever nosso primeiro teste, dentro da pasta tests vou criar uma outra pasta, para guardar nossos teste Unitários chama “Unit” e dentro dela vou criar um arquivo chamado CalculadoraTest.php, este arquivo vai conter uma classe chamada CalculadoraTest e todas as nossas classes de teste devem estender de TestCase, ficando algo do tipo:

<?php
namespace Youtube\TestesPhp\Tests\Unit;
use PHPUnit\Framework\TestCase;
class CalculadoraTest extends TestCase
{
 
}

E os nossos testes serão os métodos internos desta classe, para demarcar que o método se trata de um teste temos duas opções:

Opção 1: prefixo test no nome do método:

public function testMeuMetodoDeTeste(){
}

Opção 2: annotation /** @test */

/** @test */
public function meuMetodoDeTeste(){
}

E todos os nossos teste vão seguir o seguinte padrão:

Nas primeiras linhas vamos preparar todas as nossas variáveis necessárias para executar nossos testes.

Logo em seguida vamos chamar a função que desejamos  testar no passando os parâmetros necessários e salvando seu retorno, se necessário.

Por fim vamos testar se o retorno da função foi de acordo com o esperado pelo nosso teste, no caso do PHPUnit vamos usar os métodos assert(); que vem da classe TestCase temos vários tipos de assert (afirmar), vou deixar algum exemplos abaixo:

$this->assertEquals($valorEsperado, $valorRecebido) // TESTA SE VALORES SÃO EQUIVALENTES
$this->assertTrue($valorRecebido) // TESTA SE O RESULTADO FOI VERDADEIRO
$this->assertFalse($valorRecebido) // TESTA SE O RESULTADO FOI FALSO
$this->assertInstanceOf(Classe::class) // TESTA SE O RETORNO FOI UMA INSTANCIA DE ALGUMA CLASSE

Existem vários outros tipos de afirmações possíveis e você pode ver todas na documentação do framework.

Um exemplo completo de teste seria

<?php
namespace Youtube\TestesPhp\Tests\Unit;
use PHPUnit\Framework\TestCase;
use Youtube\TestesPhp\Calculadora;
class CalculadoraTest extends TestCase
{
    public function testMetodoSomaDeveRetornarASomaDeDoisNumeroRecebidosComoParametro()
    {
        // Declaração
        $numeroUm = 5;
        $numeroDois = 10;
        $resultadoEsperado = 15;
        // Executar
        $resultado = Calculadora::soma($numeroUm, $numeroDois);
        // Assert -> Testar
        $this->assertEquals($resultado, $resultadoEsperado, O resultado não esta de acordo com o esperado);
    }
}
CalculadoraTest.php

 

<?php
namespace Youtube\TestesPhp;
class Calculadora
{
    public static function soma(int $numeroUm, int $numeroDois): int
    {
        return $numeroUm + $numeroDois;
    }
}
 
Calculadora.php

Você pode perceber que o nome do nosso método ficou meio grande, e isso é bom, é importante que o nome do teste descreva bem o caso de teste dele.

Espero que com este post tenha conseguido te ajudar a entender como executar testes usando PHP.

Referencias: 
https://phpunit.readthedocs.io/
https://www.youtube.com/watch?v=f3tD-K796xo
https://www.youtube.com/watch?v=G8SNRbZSRNw
https://www.youtube.com/watch?v=E2UIuhjwLY0

Github com o código:
https://github.com/Sobrinhos/VideoTestesPHP

Deixe um comentário