albreis/phptest

1.2.1 2022-03-02 04:39 UTC

This package is auto-updated.

Last update: 2024-05-29 05:17:30 UTC


README

img

PHPTest

Uma alternativa ao PHPUnit

Como funciona

Este pacote serve para gerar teste a partir de comentários no código. Uma alternativa mais simplista ao PHPUnit.

A idéia é diminuir o trabalho por trás da tarefa massante que é criar testes.

Como usar

Você pode clonar o repositorio ou então instalar utilizando o composer:

composer require albreis/phptest

Para utilizar está suite de teste basta utilizar o padrão:

@test [codigo php para executar contendo um "return"]

ou

@test [codigo php para executar contendo um "return"] @expect return [retorno esperado do teste anterior]

Em caso de testes para exceptions não é necessário fazer o return, pois o retorno é feito automaticamente com a mensagem da exception.

Exemplo de teste de exception:

<?php namespace Albreis\Kurin;

use Albreis\Kurin\Interfaces\IEvent;

/** @package Albreis\Kurin */

/**
 * @test new Albreis\Kurin\Event
 * @expect return 'Cannot instantiate abstract class Albreis\Kurin\Event';
 */
abstract class Event implements IEvent {

  private ?array $callbacks = [];
  private $message;
  ...

Exectando o teste acima o retorno será, pois uma classe abstrata não pode ser instanciada, logo, esperamos essa mensagem de retorno:

File: /home/webprodutora/everhost.net.br/kurin/src/Event.php
Line: 8
Test: new Albreis\Kurin\Event
Return: string(53) "Cannot instantiate abstract class Albreis\Kurin\Event"
Expect: Cannot instantiate abstract class Albreis\Kurin\Event
Status: Success

Congratulations! All tests are passed.

O valor retornado precisa ser true ou false

Veja abaixo algums exemplos de utilização da ferramenta

Exemplo 1

<?php namespace Albreis;

class Calculadora {
    /**
     * @test return (new Albreis\Calculadora)->soma(1, 2) == 3
     * @test return (new Albreis\Calculadora)->soma(1, 2) == 4
     */
    public function soma($num1, $num2) {
        return ($num1 + $num2);
    }
}

Salve o arquivo acima em uma pasta e rode o comando abaixo, indicando a pasta onde existem os arquivos para teste

php vendor/bin/phptest {diretorio}

ou

php vendor/albreis/test/phptest {diretorio}

Exemplo 2

<?php namespace Albreis;

class Anime {
    /**
     * @test return isset(json_decode((new Albreis\Anime)->getRandom())->anime)
     * @test return !isset(json_decode((new Albreis\Anime)->getRandom())->anime)
     */
    public function getRandom() {
        return file_get_contents('https://animechan.vercel.app/api/random');
    }
}
php vendor/albreis/test/phptest {diretorio}

Escrevendo testes em arquivos externos

Quando o teste for muito complexo é precisa de várias linhas o ideal é escrever em um arquivo externo.

Basta utilizar o padrão: @test_using [caminho relativo do arquivo externo]

Arquivo de teste: SomaTest.php

<?php 
return (new Albreis\Soma)->soma(2, 3) == 5;

Classe para testar:

<?php namespace Albreis;

class Soma {
    /**
     * @test return (new Albreis\Soma)->soma(9,9) == 89
     * @test_using SomaTest.php
     */
    public function soma($num1, $num2) {
        return ($num1 + $num2);
    }
}

Testando um bloco de código

/**
 * @test return ($num1 + $num2) == 4
 */
$num1 = 1;
$num2 = 3;

Retornará:

File: /home/public_html/bin/examples/tests.php
Line: 4
Test: return ($num1 + $num2) == 4
Return: bool(true)
Status: Success

Congratulations! All tests are passed.

Testando uma função

/**
 * @test return soma(1, 1) == 2
 */
function soma($n, $n2) {
    return ($n + $n2);
}

Retornará:

File: /home/public_html/bin/examples/tests.php
Line: 10
Test: return soma(1, 1) ==2
Return: bool(true)
Status: Success

Congratulations! All tests are passed.

Excluir um arquivo ou diretório dos testes

Caso você não queira testar alguns arquivos ou diretórios específicos você pode utilizar a opção --exclude ou --exclude_regex, veja um exemplo:

Ignorar o diretório vendor

php vendor/bin/phptest --exclude-regex=vendor/* .

Ignorar o arquivo index.php

php vendor/bin/phptest --exclude-regex=vendor/* .

Ignorar o arquivo index.php e o diretório vendor

php vendor/bin/phptest --exclude-regex=vendor/* --exclude=index.php .

Logs

Após os testes serem executados será salvo um arquivo de logs na raiz do projeto chamado phptest.logs, contendo um feedback completo de todos os testes.

Helpers

O PHPTest possui algumas funções para auxiliar na execução de alguns testes.

get_http_status_code(string $url)

Retorna o código de status HTTP

Contribuições

Clone a branch Develop, crie uma nova branch com sua feature, faça suas alterações e depois crie um PR (pull request) que irei avaliar o que foi feito e se aprovado farei o merge na Main.

Doações

No momento estou mantendo o projeto totalmente sozinho, então, doações são bem vindas! :) Podem ser feitas atravez do PIX 12454995727 ou via paypal contato@everaldoreis.com.br

Suporte

WhatsApp: https://wa.me/554898523084

img