1. Préface
Dans cet article, nous utilisons l'outil de gestion des packages de dépendances de composer pour installer et gérer les packages phpunit. getcomposer.org/, suivez simplement les instructions pour l'installer globalement. De plus, nous utiliserons également un composant de journalisation Monolog très facile à utiliser pour enregistrer les journaux pour notre commodité.
Créez le fichier de configuration de coomposer.json dans le répertoire racine et entrez le contenu suivant :
{ "autoload": { "classmap": [ "./" ] } }
Ce qui précède signifie charger tous les fichiers de classe dans le répertoire racine et l'exécuter sur la commande line Après l'installation de composer, un dossier fournisseur sera généré dans le répertoire racine. Tout code tiers que nous installerons via composer à l'avenir sera généré ici.
2. Pourquoi les tests unitaires ?
Chaque fois que vous pensez à taper quelque chose dans une instruction d'impression ou une expression de débogage, remplacez-le par un test. --Martin Fowler
PHPUnit est un logiciel open source développé dans le langage de programmation PHP et est un framework de tests unitaires. PHPUnit a été créé par Sebastian Bergmann, dérivé de SUnit de Kent Beck, et est l'un des frameworks de la famille xUnit.
Les tests unitaires sont le processus de test d'objets de code individuels, tels que les fonctions, les classes et les méthodes. Les tests unitaires peuvent utiliser n'importe quel morceau de code de test qui a été écrit, ou vous pouvez utiliser certains frameworks de tests existants, tels que JUnit, PHPUnit ou Cantata++. Le framework de tests unitaires fournit une série de fonctions courantes et utiles pour aider les utilisateurs à écrire des unités de détection automatisées. , comme une assertion qui vérifie si une valeur réelle correspond à la valeur attendue. Les frameworks de tests unitaires incluent souvent des rapports pour chaque test et vous donnent la couverture de code que vous avez couverte.
En un mot, l'utilisation de phpunit pour les tests automatiques rendra votre code plus robuste et réduira le coût de la maintenance ultérieure. Il s'agit également d'une spécification relativement standard. Les frameworks PHP populaires d'aujourd'hui sont tous livrés avec des tests unitaires. , Symfony, Yii2, etc., les tests unitaires sont devenus la norme.
De plus, le scénario de test unitaire contrôle le script de test via des commandes, plutôt que d'accéder à l'URL via le navigateur.
3. Installez PHPUnit
Utilisez composer pour installer PHPUnit, veuillez voir ici
composer require --dev phpunit/phpunit ^6.2
Installer. Package de journal Monolog, utilisé pour les tests et la journalisation PHPunit.
composer require monolog/monolog
Après l'installation, nous pouvons voir que le fichier coomposer.json contient déjà ces deux packs d'extension :
"require": { "monolog/monolog": "^1.23", }, "require-dev": { "phpunit/phpunit": "^6.2" },
Utilisation simple de PHPUnit<🎜. >
1. Test de fichier unique
Créez le répertoire tests, créez un nouveau fichier StackTest.php, éditez-le comme suit :<?php /** * 1、composer 安装Monolog日志扩展,安装phpunit单元测试扩展包 * 2、引入autoload.php文件 * 3、测试案例 * * */ namespace App\tests; require_once __DIR__ . '/../vendor/autoload.php'; define("ROOT_PATH", dirname(__DIR__) . "/"); use Monolog\Logger; use Monolog\Handler\StreamHandler; use PHPUnit\Framework\TestCase; class StackTest extends TestCase { public function testPushAndPop() { $stack = []; $this->assertEquals(0, count($stack)); array_push($stack, 'foo'); // 添加日志文件,如果没有安装monolog,则有关monolog的代码都可以注释掉 $this->Log()->error('hello', $stack); $this->assertEquals('foo', $stack[count($stack)-1]); $this->assertEquals(1, count($stack)); $this->assertEquals('foo', array_pop($stack)); $this->assertEquals(0, count($stack)); } public function Log() { // create a log channel $log = new Logger('Tester'); $log->pushHandler(new StreamHandler(ROOT_PATH . 'storage/logs/app.log', Logger::WARNING)); $log->error("Error"); return $log; } }
StackTest est une classe de testStackTest hérite de PHPUnitFrameworkTestCase méthode de test testPushAndPop() La méthode de test doit avoir des autorisations publiques et commence généralement par test, ou vous. peut choisir d'y ajouter des commentaires. @test vient représenter Dans la méthode de test, des méthodes d'assertion similaires à assertEquals() sont utilisées pour faire des assertions sur la correspondance entre la valeur réelle et la valeur attendue. Exécution de la ligne de commande :Nom du fichier de test de la commande phpunit
➜ framework# ./vendor/bin/phpunit tests/StackTest.php // 或者可以省略文件后缀名 // ./vendor/bin/phpunit tests/StackTest
➜ framework# ./vendor/bin/phpunit tests/StackTest.php PHPUnit 6.4.1 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 56 ms, Memory: 4.00MB OK (1 test, 5 assertions)
2. Introduction au fichier de classe
Calculator.php<?php class Calculator { public function sum($a, $b) { return $a + $b; } } ?>
<?php namespace App\tests; require_once __DIR__ . '/../vendor/autoload.php'; require "Calculator.php"; use PHPUnit\Framework\TestCase; class CalculatorTest extends TestCase { public function testSum() { $obj = new Calculator; $this->assertEquals(0, $obj->sum(0, 0)); } }
> ./vendor/bin/phpunit tests/CalculatorTest
PHPUnit 6.4.1 by Sebastian Bergmann and contributors. F 1 / 1 (100%) Time: 117 ms, Memory: 4.00MB There was 1 failure:
PHPUnit 6.4.1 by Sebastian Bergmann and contributors. F 1 / 1 (100%) Time: 117 ms, Memory: 4.00MB There was 1 failure: 1) App\tests\CalculatorTest::testSum Failed asserting that 0 matches expected 1. /Applications/XAMPP/xamppfiles/htdocs/web/framework/tests/CalculatorTest.php:22 FAILURES! Tests: 1, Assertions: 1, Failures: 1.
3. Utilisation avancée
En avez-vous assez d'ajouter test devant chaque nom de méthode de test ? Avez-vous du mal à écrire plusieurs cas de test car les paramètres que vous appelez sont différents ? Ma fonctionnalité avancée préférée, que je vous recommande maintenant, s'appelle Frame Builder. Calculator.php<?php class Calculator { public function sum($a, $b) { return $a + $b; } } ?>
> ./vendor/bin/phpunit --skeleton Calculator.php
PHPUnit 6.4.1 by Sebastian Bergmann and contributors. Wrote test class skeleton for Calculator to CalculatorTest.php.
<?php class Calculator { /** * @assert (0, 0) == 0 * @assert (0, 1) == 1 * @assert (1, 0) == 1 * @assert (1, 1) == 2 */ public function sum($a, $b) { return $a + $b; } } ?>
/** * Generated from @assert (0, 0) == 0. */ public function testSum() { $obj = new Calculator; $this->assertEquals(0, $obj->sum(0, 0)); }
Copier après la connexion
Tutoriel PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!