2
0

README.md 6.6 KB

PHP UniTester

UniTester is a lightweight, zero-dependency unit testing library for PHP. It is designed for developers who want to write tests at the lowest level of PHP, without the overhead or complexity of massive frameworks.


🇬🇧 English Documentation

💡 Philosophy

  • Zero Dependency: UniTester relies on no external libraries. Install it, and it works. No version conflicts, no bloated vendor.
  • Simplicity: No magic, no complex annotations. Just PHP code.
  • Performance: Built to be fast and to help you test your own code's performance.
  • Clarity: Explicit error messages that tell you exactly what went wrong (types, JSON content, etc.).

📦 Installation

composer require depo/unitester

🚀 Usage

  1. Create a tests/ directory at your project root.
  2. Create a test class extending Depo\UniTester\TestCase.
  3. Implement the execute() method to list your tests.

Example:

<?php

namespace Tests;

use Depo\UniTester\TestCase;

class MathTest extends TestCase
{
    protected function setUp(): void
    {
        // Executed before all tests in the class
    }

    protected function tearDown(): void
    {
        // Executed after all tests in the class
    }

    protected function execute(): void
    {
        $this->testAddition();
        $this->testPerformance();
    }

    public function testAddition()
    {
        $this->assertEquals(4, 2 + 2, "Addition should be correct");
    }

    public function testPerformance()
    {
        $this->assertExecutionTimeLessThan(10, function() {
            // Critical code
        });
    }
}

Run tests:

php vendor/bin/unitester tests/

🛠 API Reference

Basic Assertions

All assertions accept an optional last $message parameter.

  • assertEquals($expected, $actual): Loose equality (==).
  • assertStrictEquals($expected, $actual): Strict equality (===).
  • assertNotEquals($expected, $actual)
  • assertNotStrictEquals($expected, $actual)
  • assertTrue($condition)
  • assertFalse($condition)
  • assertNull($value)
  • assertNotNull($value)
  • assertEmpty($value)
  • assertNotEmpty($value)
  • assertInstanceOf($expectedClass, $object)

Array & String Assertions

  • assertCount($expectedCount, $haystack): Checks size of array or Countable.
  • assertArrayHasKey($key, $array): Checks for key existence.
  • assertStringContains($haystack, $needle)
  • assertStringStartsWith($haystack, $needle)
  • assertStringEndsWith($haystack, $needle)
  • assertStringLength($string, $length)

Performance Assertions (Low Level)

  • assertExecutionTimeLessThan(float $ms, callable $callback): Verifies callback runs under X ms.
  • assertMemoryUsageLessThan(int $bytes, callable $callback): Verifies callback consumes less than X bytes.

File System Assertions

  • assertFileExists($path)
  • assertFileNotExists($path)
  • assertDirectoryExists($path)
  • assertIsReadable($path)
  • assertIsWritable($path)

Debugging Helpers

  • $this->log(string $message): Prints a message to the console during tests.
  • $this->dump($value): Prints formatted variable content.
  • fail(string $message): Manually fails the test.

🇫🇷 Documentation en Français

UniTester est une librairie de tests unitaires pour PHP, légère et sans aucune dépendance. Elle est conçue pour les développeurs qui souhaitent écrire des tests au plus près du langage, sans la complexité des gros frameworks.

💡 Philosophie

  • Zéro Dépendance : UniTester ne dépend d'aucune librairie externe. Vous l'installez, et ça marche. Pas de conflits de versions, pas de vendor obèse.
  • Simplicité : Pas de magie, pas d'annotations complexes. Juste du code PHP.
  • Performance : Conçu pour être rapide et tester la performance de votre propre code.
  • Clarté : Des messages d'erreur explicites qui vous disent exactement ce qui ne va pas (types, contenu JSON, etc.).

📦 Installation

composer require depo/unitester

🚀 Utilisation

  1. Créez un dossier tests/ à la racine de votre projet.
  2. Créez une classe de test qui étend Depo\UniTester\TestCase.
  3. Implémentez la méthode execute() pour lister vos tests.

Exemple :

<?php

namespace Tests;

use Depo\UniTester\TestCase;

class MathTest extends TestCase
{
    protected function setUp(): void
    {
        // Exécuté avant l'ensemble des tests de la classe
    }

    protected function tearDown(): void
    {
        // Exécuté après l'ensemble des tests de la classe
    }

    protected function execute(): void
    {
        $this->testAddition();
        $this->testPerformance();
    }

    public function testAddition()
    {
        $this->assertEquals(4, 2 + 2, "L'addition doit être correcte");
    }

    public function testPerformance()
    {
        $this->assertExecutionTimeLessThan(10, function() {
            // Code critique
        });
    }
}

Lancer les tests :

php vendor/bin/unitester tests/

🛠 API Reference

Assertions de Base

Toutes les assertions acceptent un dernier paramètre $message optionnel.

  • assertEquals($expected, $actual) : Égalité souple (==).
  • assertStrictEquals($expected, $actual) : Égalité stricte (===).
  • assertNotEquals($expected, $actual)
  • assertNotStrictEquals($expected, $actual)
  • assertTrue($condition)
  • assertFalse($condition)
  • assertNull($value)
  • assertNotNull($value)
  • assertEmpty($value)
  • assertNotEmpty($value)
  • assertInstanceOf($expectedClass, $object)

Assertions sur les Tableaux et Chaînes

  • assertCount($expectedCount, $haystack) : Vérifie la taille d'un tableau ou Countable.
  • assertArrayHasKey($key, $array) : Vérifie la présence d'une clé.
  • assertStringContains($haystack, $needle)
  • assertStringStartsWith($haystack, $needle)
  • assertStringEndsWith($haystack, $needle)
  • assertStringLength($string, $length)

Assertions de Performance (Low Level)

  • assertExecutionTimeLessThan(float $ms, callable $callback) : Vérifie que le callback s'exécute en moins de X ms.
  • assertMemoryUsageLessThan(int $bytes, callable $callback) : Vérifie que le callback consomme moins de X octets.

Assertions Système de Fichiers

  • assertFileExists($path)
  • assertFileNotExists($path)
  • assertDirectoryExists($path)
  • assertIsReadable($path)
  • assertIsWritable($path)

Helpers de Debugging

  • $this->log(string $message) : Affiche un message dans la console pendant les tests.
  • $this->dump($value) : Affiche le contenu formaté d'une variable.
  • fail(string $message) : Fait échouer le test manuellement.