depo / unitester
PHP UniTester is a unit testing library for PHP that provides a straightforward interface for writing and executing tests. It focuses on a minimalist approach, allowing developers to create assertions and organize tests at the lowest level of PHP, without reliance on complex external libraries.
Requires
- php: >=7.4
- ext-mbstring: *
- psr/container: ^2.0
This package is not auto-updated.
Last update: 2025-11-21 09:14:00 UTC
README
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
- Create a
tests/directory at your project root. - Create a test class extending
Depo\UniTester\TestCase. - 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
vendorobè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
- Créez un dossier
tests/à la racine de votre projet. - Créez une classe de test qui étend
Depo\UniTester\TestCase. - 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.