PHP Classes

Learn How to Develop a PHPUnit Test Class to Test If an Operation Class Works as Expected From Examples of the Package Testes Unitarios: Show how to test classes using PHPUnit

Recommend this page to a friend!
  Info   View files Example   View files View files (12)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2024-07-20 (2 days ago) RSS 2.0 feedNot yet rated by the usersTotal: 12 This week: 12All time: 11,343 This week: 5Up
Version License PHP version Categories
testes-unitarios 1.0.0MIT/X Consortium ...8Language, Testing, PHP 8
Description 

Author

This package can show how to test classes using PHPUnit.

It provides several classes that perform certain operations.

The package also provides test classes to use with PHPUnit to demonstrate how to test if the operation classes work as expected.

Picture of Rodrigo Faustino
  Performance   Level  
Name: Rodrigo Faustino <contact>
Classes: 23 packages by
Country: Brazil Brazil
Innovation award
Innovation award
Nominee: 16x

Winner: 2x

Example

<?php
namespace App\Testes;

require
'../vendor/autoload.php';

use
App\Testes\User;
use
App\Testes\UserService;

header('Content-Type: application/json');

$method = $_SERVER['REQUEST_METHOD'];
$data = json_decode(file_get_contents('php://input'), true);

$user = new User();
$userService = new UserService($user);

$response = ['status' => 'error', 'message' => 'Requisição inválida'];

if (
$method === 'POST' && isset($data['action']) && isset($data['username']) && isset($data['password'])) {
   
$action = $data['action'];
   
    try {
        if (
$action === 'register') {
           
$userService->registrarUser($data['username'], $data['password']);
           
$response = ['status' => 'success', 'message' => 'Usuário registrado com sucesso'];
        } elseif (
$action === 'login') {
            if (
$userService->logarUser($data['username'], $data['password'])) {
               
$response = ['status' => 'success', 'message' => 'Login bem-sucedido'];
            } else {
               
$response = ['status' => 'error', 'message' => 'Credenciais incorretas'];
            }
        }
    } catch (\
Exception $e) {
       
$response = ['status' => 'error', 'message' => $e->getMessage()];
    }
}

echo
json_encode($response);


Details

Projeto de Testes Unitários e de Integração em PHP

Descrição

Este projeto demonstra a criação e execução de testes unitários e de integração em PHP utilizando o PHPUnit. Ele inclui exemplos de como registrar e autenticar usuários, com testes unitários e de integração correspondentes para verificar a funcionalidade.

O que é Teste Unitário?

Teste unitário é uma técnica de teste de software onde pequenas partes do código (unidades) são testadas isoladamente para garantir que funcionem corretamente. Os testes unitários são fundamentais para identificar bugs no início do desenvolvimento e garantir que cada parte do código funcione como esperado.

O que é Teste de Integração?

Teste de integração verifica a interação entre diferentes módulos ou serviços do sistema, garantindo que eles funcionem juntos corretamente.

Pré-requisitos

  • PHP >= 8.0
  • Composer

Instalação

Siga os passos abaixo para configurar o projeto em sua máquina local.

  1. Clone o repositório:

    git clone https://github.com/seu-usuario/seu-repositorio.git
    cd seu-repositorio
    
  2. Instale as dependências do projeto:

    composer install
    
  3. Estrutura de Diretórios:

    ??? src/
    ?   ??? User.php
    ?   ??? UserService.php
    ??? tests/
    ?   ??? UserTest.php
    ?   ??? UserServiceTest.php
    ??? vendor/
    ??? composer.json
    ??? phpunit.xml
    

Executando os Testes

Testes Unitários

Para executar os testes unitários, use o comando:

./vendor/bin/phpunit tests/UserTest.php

estes de Integração Para executar os testes de integração, use o comando:

./vendor/bin/phpunit tests/UserServiceTest.php

Exemplos de Código

  • Classe User A classe User permite registrar e logar usuários. Aqui está um exemplo simples:
namespace App\Testes;

class User {
    private $users = [];

    public function register($username, $password) {
        if (isset($this->users[$username])) {
            throw new \Exception("O nome de usuário já existe");
        }
        $this->users[$username] = password_hash($password, PASSWORD_DEFAULT);
        return true;
    }

    public function login($username, $password) {
        if (!isset($this->users[$username])) {
            return false;
        }
        return password_verify($password, $this->users[$username]);
    }
}

Testes Unitários para a Classe User Aqui estão alguns exemplos de testes unitários para a classe User:

namespace App\Testes;

use PHPUnit\Framework\TestCase;

class UserTest extends TestCase {
    private $user;

    protected function setUp(): void {
        $this->user = new User();
    }

    public function testRegistrarUsuario() {
        $result = $this->user->register("testuser", "password123");
        $this->assertTrue($result, "Registro de usuário falhou");
        fwrite(STDOUT, "Função testada: register - Registro de usuário com sucesso.\n");
    }

    public function testRegistrarUsuarioExistente() {
        $this->user->register("testuser", "password123");
        $this->expectException(\Exception::class);
        $this->expectExceptionMessage("O nome de usuário já existe");
        try {
            $this->user->register("testuser", "password456");
        } catch (\Exception $e) {
            $this->assertEquals("O nome de usuário já existe", $e->getMessage());
            fwrite(STDOUT, "Função testada: register - Exceção lançada para usuário existente.\n");
            throw $e;
        }
    }

    public function testLoginCorreto() {
        $this->user->register("testuser", "password123");
        $result = $this->user->login("testuser", "password123");
        $this->assertTrue($result, "Login falhou com credenciais corretas");
        fwrite(STDOUT, "Função testada: login - Login bem-sucedido com credenciais corretas.\n");
    }

    public function testLoginIncorreto() {
        $this->user->register("testuser", "password123");
        $result = $this->user->login("testuser", "wrongpassword");
        $this->assertFalse($result, "Login bem-sucedido com credenciais incorretas");
        fwrite(STDOUT, "Função testada: login - Falha no login com credenciais incorretas.\n");
    }

    public function testLoginUsuarioInexistente() {
        $result = $this->user->login("nonexistentuser", "password123");
        $this->assertFalse($result, "Login bem-sucedido com usuário inexistente");
        fwrite(STDOUT, "Função testada: login - Falha no login com usuário inexistente.\n");
    }
}

Contribuindo

Sinta-se à vontade para contribuir com este projeto enviando pull requests. Para grandes mudanças, por favor, abra uma issue primeiro para discutir o que você gostaria de mudar.

Licença Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes.


  Files folder image Files  
File Role Description
Files folder imagesrc (4 files)
Files folder imagetests (4 files)
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login HTML file index.html Doc. Documentation
Accessible without login Plain text file readme.md Doc. Documentation

  Files folder image Files  /  src  
File Role Description
  Accessible without login Plain text file Api.php Example Example script
  Plain text file Calculadora.php Class Class source
  Plain text file User.php Class Class source
  Plain text file UserService.php Class Class source

  Files folder image Files  /  tests  
File Role Description
  Plain text file ApiTest.php Class Class source
  Plain text file CalculadoraTest.php Class Class source
  Plain text file UserServiceTest.php Class Class source
  Plain text file UserTest.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:12
This week:12
All time:11,343
This week:5Up