Version PHP | version atoum |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X (actuel) |
Tout comme SimpleTest ou PHPUnit, atoum est un framework de tests unitaires spécifique au langage PHP. Cependant, il a été conçu dès le départ avec les idées suivantes en tête :
Peut être mis en œuvre rapidement ,
Simplifier le développement des tests,
Permet d'écrire des tests unitaires fiables, lisibles et clairs .
Pour ce faire, il utilise massivement les capacités fournies par PHP , pour offrir au développeur une toute nouvelle façon d'écrire des tests unitaires. Il peut donc être installé et intégré extrêmement facilement dans un projet existant, puisqu'il ne s'agit que d'une seule archive PHAR , qui est le seul et unique point d'entrée pour le développeur. De plus, grâce à son interface fluide , il permet d'écrire des tests unitaires d'une manière proche du langage naturel. Il facilite également la mise en œuvre du stubbing dans les tests, grâce à une utilisation intelligente des fonctions anonymes et des fermetures . atoum effectue nativement et par défaut l'exécution de chaque test unitaire au sein d'un processus PHP distinct, pour garantir l'isolement . Bien entendu, il peut être utilisé de manière transparente pour une intégration continue et, compte tenu de sa conception, il peut être conçu pour répondre extrêmement facilement à des besoins spécifiques. atoum accomplit également tout cela sans affecter les performances, puisqu'il a été développé pour offrir une empreinte mémoire réduite tout en permettant une exécution accélérée des tests. Il peut également générer des rapports d'exécution de tests unitaires au format Xunit, ce qui le rend compatible avec les outils d'intégration continue tels que Jenkins. atoum génère également des rapports de couverture de code, afin de permettre d'encadrer les tests unitaires. Enfin, même s'il est développé principalement sous UNIX, il peut également fonctionner sous Windows.
atoum est vraiment simple à installer : clonez-le depuis github, téléchargez son PHAR ou utilisez simplement composer,
atoum offre un haut niveau de sécurité lors de l'exécution des tests en isolant chaque méthode de test dans son propre processus PHP. Bien entendu, cette fonctionnalité est disponible immédiatement, pas besoin d'installer d'extension supplémentaire,
atoum exécute des tests dans un environnement parallélisé permettant à la suite de fonctionner aussi rapidement que possible en tirant parti des processeurs multicœurs d'aujourd'hui,
atoum fournit un ensemble complet d'assertions naturelles et expressives rendant les tests aussi lisibles que possible. Voici un exemple :
<?php$this->entier(150) ->isGreaterThan(100) ->isLowerThanOrEqualTo(200) ;
atoum supporte une syntaxe de type BDD avec de nombreux mots-clés structurels :
<?php$this->given($testedInstance = new testClass()) ->et($testedClass[] = $firstValue = uniqid()) ->then->sizeof($testedInstance)->isEqualTo(1) ->string($testedClass[0])->isEqualTo($firstValue) ;
atoum fournit un moteur fictif très simple, mais très puissant :
<?php$this->given($testedInstance = new testClass()) ->and($aMock = new mockfoobar()) // ici une simulation de la classe foobar est créée dynamiquement->and($this->calling($aMock)->doOtherThing = true) // chaque appel à doOtherThing( ) par l'instance renverra true->and($testedInstance->setDependency($aMock)) ->puis->booléen($testedInstance->doSomething())->isTrue() -> moquerie ($aMock) ->call('doOtherThing')->withArguments($testedInstance)->once() // Affirme que la méthode doOtherThing() de $aMock a été appelée une fois ;
atoum fournit une API claire pour affirmer les exceptions :
<?php$this->given($testedInstance = new testClass()) ->and($aMock = new mockfoobar()) // ici une simulation de la classe foobar est créée dynamiquement->and($this->calling($aMock)->doOtherThing->throw = $exception = new exception( )) // L'appel à doOtherThing() lèvera une exception->and($testedInstance->setDependency($aMock)) ->then->exception(function() use ($testedInstance) { $testedInstance->doSomething(); }) ->estIdentiqueÀ($exception) ;
atoum vous permet également de vous moquer des fonctions PHP natives. Encore une fois, ceci est disponible immédiatement :
<?php$this->given($this->function->session_start = false) ->et($session = nouvelle Classe testée()) ->then->exception(function () use ($session) { $session->start(); }) ->isInstanceOf('projectnamespaceexception') ->hasMessage('Impossible de démarrer la session') ->fonction('session_start')->wasCalled()->once() ;
atoum est capable de produire plusieurs rapports comme TAP, clover, xUnit pour être facilement intégré à Jenkins ou tout autre outil d'intégration continue,
atoum accompagne les fournisseurs de données,
Les tests atoum prennent en charge l'exécution automatique : incluez simplement le coureur atoum et lancez votre test en utilisant php path/to/test/file.php
,
Le fichier de configuration d' atoum est exclusivement écrit en PHP (pas de XML, YAML ou tout autre format) vous offrant la meilleure flexibilité :
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = new atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); ->setTestedClassNamespace('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$runner->setTestGenerator($testGenerator);
atoum fournit un générateur automatique de modèles de tests,
atoum propose un mode boucle pour redéclencher facilement les tests ayant échoué,
atoum regorge d’autres fonctionnalités intéressantes que vous découvrirez au fil du temps.
atoum nécessite absolument PHP >= 5.6.0
ou version ultérieure pour fonctionner. Sous UNIX, afin de vérifier si vous disposez de la bonne version de PHP, il vous suffit de lancer la commande suivante dans votre terminal :
$php-v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
Si PHP 5.6.x
ou équivalent s'affiche, alors vous avez la bonne version de PHP installée. Si vous souhaitez utiliser atoum en utilisant son archive PHAR, vous avez également besoin de PHP pour pouvoir accéder au module phar
, qui est normalement disponible par défaut. Sous UNIX, afin de vérifier si vous disposez ou non de ce module, il vous suffit d'exécuter la commande suivante dans votre terminal :
$php-m | grep -je phar
Si Phar
ou équivalent s'affiche, alors le module est correctement installé. La génération de rapports au format Xunit nécessite le module xml
. Sous UNIX, afin de vérifier si vous disposez ou non de ce module, il vous suffit d'exécuter la commande suivante dans votre terminal :
$php-m | grep -i xml
Si Xml
ou équivalent s'affiche, alors le module est correctement installé. Si vous souhaitez suivre le taux de couverture de votre code par les tests unitaires, le module Xdebug 2.3 sera requis. Sous UNIX, afin de vérifier si vous disposez ou non de ce module, il vous suffit d'exécuter la commande suivante dans votre terminal :
$php-v | grep -oi 'xdebug'
Si Xdebug
ou équivalent s'affiche, alors le module est correctement installé.
Il vous suffit de télécharger son archive PHAR et de la stocker où vous le souhaitez, par exemple sous /path/to/project/tests/atoum.phar
. Cette archive PHAR contient la dernière version de développement pour réussir la totalité des tests unitaires d' atoum . Le code source d' atoum est également disponible via le dépôt GitHub. Pour vérifier si atoum fonctionne correctement avec votre configuration, vous pouvez exécuter tous ses tests unitaires. Pour cela, il vous suffit d'exécuter la commande suivante dans votre terminal :
$ php atoum.phar --test-it
À l'aide de votre éditeur de texte préféré, créez le path/to/project/tests/units/helloWorld.php
et ajoutez le code suivant :
<?phpnamespace sellerprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use supplierproject;class helloWorld extends atoumtest {fonction publique testSay() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Bonjour tout le monde !'); } }
Lancez votre terminal et exécutez la commande suivante :
$ php chemin/vers/test/fichier[entrée]
Vous devriez obtenir le résultat suivant ou quelque chose d'équivalent :
> atoum version XXX de Frédéric Hardy. Erreur : exception sans surveillance : la classe testée « vendorprojecthelloWorld » n'existe pas pour la classe de test « vendorprojecttestsunitshelloWorld »
En utilisant à nouveau votre éditeur de texte préféré, créez le fichier path/to/project/classes/helloWorld.php
et ajoutez le code suivant :
<?phpnamespace supplierproject;class helloWorld {fonction publique dire() {retourne « Bonjour tout le monde ! » ; } }
Dans le même terminal, exécutez à nouveau la commande suivante :
$ php chemin/vers/test/fichier[entrée]
Vous devriez obtenir le résultat suivant, ou quelque chose d'équivalent :
> atoum version 288 par Frédéric Hardy.> Lancer supplierprojecttestsunitshelloWorld... [S_________________________________________________________________________][1/1] => Durée du test : 0,00 seconde. => Utilisation de la mémoire : 0,25 Mo.> Durée totale du test : 0,00 seconde.> Utilisation totale de la mémoire du test : 0,25 Mo.> Valeur de couverture du code : 100,00 %> Durée d'exécution : 0,08 seconde.> Succès (1 test, 1 méthode, 2 assertions , 0 erreur, 0 exception) !
<?phpnamespace sellerprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use supplierproject;class helloWorld extends atoumtest {fonction publique test__construct() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Bonjour !') ->string($helloWorld->say($name = 'Frédéric Hardy'))->isEqualTo('Bonjour ' . $name . '!') ; } }
La documentation d' atoum est toujours en cours d'écriture. Toute aide pour l'améliorer sera appréciée. Cependant, si vous souhaitez approfondir immédiatement les possibilités d' atoum , nous vous recommandons :
En exécutant dans votre terminal, soit la commande php atoum.phar -h
, soit la commande php scripts/runner.php -h
,
Explorer le contenu du répertoire configurations
dans les sources d' atoum , car il contient des exemples de fichiers de configuration,
Explorer le contenu du répertoire tests/unit/classes
dans les sources d' atoum , car il contient tous les tests unitaires,
Lisez les slides de la conférence à ce sujet, disponibles en ligne,
Lisez le wiki (français),
Rejoignez le canal de discussion,
Posez vos questions par e-mail à l'adresse support[AT]atoum(DOT)org .
Dans ce cas, la première chose que vous voudrez faire est de confirmer si vous disposez de la dernière version de l’archive. Il vous suffit de le télécharger à nouveau. Si cela ne fonctionne toujours pas, exécutez la commande suivante dans une fenêtre de terminal :
$ php -n atoum.phar -v
Si vous obtenez le numéro de version d' atoum , alors le problème vient de votre configuration PHP. Dans la plupart des cas, la cause serait liée aux extensions, qui pourraient être incompatibles avec le format PHAR, ou qui empêcheraient l'exécution des archives PHAR par mesure de sécurité. L'extension ioncube
par exemple semble incompatible avec les archives PHAR, et vous devez donc la désactiver si vous l'utilisez, en commentant la ligne suivante depuis votre php.ini
, en la préfixant du ;
personnage:
zend_extension = /path/to/ioncube_loader*.*
L'extension suhosin
empêche l'exécution des archives PHAR, il faut donc modifier sa configuration par défaut pour pouvoir utiliser atoum , en ajoutant la ligne suivante dans votre fichier php.ini
:
suhosin.executor.include.whitelist="phar"
Enfin, si l'exécution d'atoum provoque l'affichage à l'écran de caractères ressemblant à ???%
, ce serait parce que la directive detect_unicode
à l'intérieur de votre fichier php.ini
est définie sur 1. Pour résoudre le problème, il vous suffit de la définir sur 0 en en éditant votre fichier php.ini
ou en exécutant atoum avec la commande suivante :
$ php -d detect_unicode=0 atoum.phar [options]
Si ces trois opérations ne permettent pas à atoum de fonctionner, nous vous proposons d'envoyer un e-mail à l'adresse support[AT]atoum(DOT)org , décrivant en détail votre configuration et votre problème. Vous pouvez également demander de l'aide à l'équipe de développement d'atoum sur le canal de discussion du référentiel atoum.
__COMPILER_HALT_OFFSET__
est déjà définie /path/to/atoum.phar
Cette erreur vient du fait que l'archive atoum PHAR est incluse à plusieurs endroits dans votre code en utilisant include
ou require
. Pour résoudre ce problème, il vous suffit d'inclure l'archive en utilisant uniquement include_once
ou require_once
, afin de vous assurer qu'elle ne sera pas incluse plusieurs fois.
APC est un framework gratuit, ouvert et robuste permettant de mettre en cache et d'optimiser le code intermédiaire PHP distribué sous la forme d'une extension PHP. Lorsque vous testez des classes qui utilisent APC, vous pouvez recevoir un message d'échec indiquant que la fonction apc_fetch
est incapable de récupérer une valeur. Comme toute extension PHP, APC dispose de quelques options de configuration pour l'activer :
apc.enabled
s'il faut activer ou désactiver APC,
apc.enable_cli
, s'il faut activer ou désactiver APC pour PHP CLI.
Pour utiliser APC avec atoum , vous devez définir apc.enabled
et apc.enable_cli
sur 1
, sinon il ne sera pas activé pour la version PHP CLI, utilisée par atoum .
Lorsque vous utilisez atoum et des objets moqueurs, vous obtiendrez parfois des erreurs de segmentation provenant de PHP. Ces erreurs de segmentation sont causées par XDebug dans une version inférieure à 2.1.0 qui pose des problèmes de gestion de la réflexion dans certains cas. Pour vérifier la version actuelle de XDebug, vous pouvez exécuter php -v
. Pour résoudre ce problème, vous devez mettre à jour XDebug vers la dernière version stable. Si vous ne pouvez pas mettre à jour XDebug sur votre système, vous pouvez toujours désactiver l'extension pour éviter les erreurs de segmentation. Pour être sûr que XDebug a été mis à jour ou désactivé avec succès, vous pouvez exécuter php -v
. Lorsque vous avez terminé de mettre à jour ou de désactiver XDebug, exécutez php atoum.phar --test-it
pour être sûr que toutes les erreurs de segmentation ont disparu et qu'atoum fonctionne.
Vous cherchez une feuille de route ?
Voici le travail en cours,
Et voilà ce qui arrivera dans les prochaines versions.
atoum a été créé par Frédéric Hardy. Il est désormais animé par une forte communauté de contributeurs. Vous pouvez les retrouver dans la liste des committers ou dans l'équipe Contributeurs.
atoum est publié sous la licence BSD-3-Clause. Consultez le fichier LICENSE fourni pour plus de détails.