Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Entwicklung: Automatisiertes Testen mit PHPUnit

PHP-Entwicklung: Automatisiertes Testen mit PHPUnit

PHPz
PHPzOriginal
2023-06-15 20:35:301491Durchsuche

Mit der rasanten Entwicklung der Softwareentwicklung sind automatisierte Tests zu einer immer beliebter werdenden Testmethode geworden. Automatisierte Tests können Entwicklern dabei helfen, schneller zu testen und verschiedene Testszenarien und Anwendungsfälle umfassender abzudecken. Die PHP-Entwicklung bildet da keine Ausnahme. PHPUnit ist eines der beliebtesten automatisierten Testtools für die PHP-Entwicklung. In diesem Artikel wird erläutert, wie Sie mit PHPUnit automatisierte Tests implementieren.

1. Einführung in PHPUnit

PHPUnit ist ein beliebtes PHP-Testframework, das von Sebastian Bergmann entwickelt wurde. Es bietet PHP-Entwicklern eine einfache, schnelle und zuverlässige Möglichkeit, Unit-Tests zu schreiben und auszuführen. PHPUnit unterstützt testgetriebene Entwicklungsansätze (TDD) und verhaltensgesteuerte Entwicklungsansätze (BDD).

2. Installieren Sie PHPUnit

Bevor Sie PHPUnit verwenden, müssen Sie sicherstellen, dass PHP und Composer installiert wurden. Öffnen Sie ein Terminal- oder Befehlszeilenfenster und verwenden Sie den folgenden Befehl, um PHPUnit und die Komponenten, von denen PHPUnit abhängt, zu installieren:

composer require --dev phpunit/phpunit

Nach erfolgreicher Installation können Sie den folgenden Befehl ausführen, um die PHPUnit-Version zu überprüfen:

./vendor/bin/phpunit --version

3

Bevor Sie PHPUnit verwenden, müssen Sie Testfälle schreiben. Ein Testfall besteht normalerweise aus drei Teilen:

  1. Bereiten Sie die für den Test erforderlichen Daten und Objekte vor
  2. Führen Sie die Testmethode aus
  3. Stellen Sie fest, ob die Testergebnisse wie erwartet sind

Hier ist ein Beispieltestfall:

<?php

use PHPUnitFrameworkTestCase;

class MyMathTest extends TestCase
{
    public function testAddition()
    {
        $myMath = new MyMath();
        $result = $myMath->add(2, 2);
        $this->assertEquals(4, $result);
    }
}

class MyMath {
    public function add($a, $b) {
        return $a + $b;
    }
}

Im obigen Testfall haben wir eine Testklasse namens MyMathTest erstellt, die von der TestCase-Klasse von PHPUnit erbt. Die Methode testAddition() führt eine Additionsberechnung durch und stellt fest, ob das Ergebnis dem erwarteten Ergebnis entspricht. In der MyMath-Klasse definieren wir eine add()-Methode, um Additionsoperationen durchzuführen.

4. Führen Sie den Testfall aus

Nachdem Sie das Schreiben des Testfalls abgeschlossen haben, können Sie den folgenden Befehl verwenden, um den Test auszuführen:

./vendor/bin/phpunit MyMathTest.php

Nachdem die Ausführung abgeschlossen ist, gibt PHPUnit die Testergebnisse aus. Wenn ein Testfall fehlschlägt, zeigt PHPUnit detaillierte Fehlerinformationen an, damit Entwickler das Problem schnell lokalisieren können.

5. Verwendung von Datenanbietern

Manchmal müssen wir mehrere Testdatensätze ausführen, um eine Methode zu testen. PHPunit bietet einen Datenanbietermechanismus, der es uns ermöglicht, solche Testfälle bequemer zu schreiben. Hier ist ein Beispiel:

<?php

use PHPUnitFrameworkTestCase;

class MyMathTest extends TestCase
{
    /**
     * @dataProvider additionDataProvider
     */
    public function testAddition($a, $b, $expected)
    {
        $myMath = new MyMath();
        $result = $myMath->add($a, $b);
        $this->assertEquals($expected, $result);
    }

    public function additionDataProvider() {
        return [
            [1, 2, 3],
            [0, 0, 0],
            [-1, -1, -2],
        ];
    }
}

class MyMath {
    public function add($a, $b) {
        return $a + $b;
    }
}

Im obigen Testfall haben wir die Annotation @DataProvider verwendet, die PHPunit anweist, die Testdaten mithilfe der Methode AdditionDataProvider() bereitzustellen. Diese Methode gibt ein Array zurück, das mehrere Sätze von Testdaten enthält. Jeder Testdatensatz enthält zwei Operanden und das erwartete Berechnungsergebnis. In der testAddition()-Methode können wir die bereitgestellten Testdaten mithilfe von $dataProvider verwenden.

6. Verwenden Sie Scheinobjekte

Beim Schreiben von Testfällen müssen wir manchmal ein Objekt simulieren. In diesem Fall können wir das von PHPUnit bereitgestellte Scheinobjekt verwenden. Ein Mock-Objekt kann ein Objekt oder eine Schnittstelle simulieren und beim Aufruf seiner Methoden einen vordefinierten Wert zurückgeben.

Das Folgende ist ein Beispiel:

<?php

use PHPUnitFrameworkTestCase;

class MyDatabaseTest extends TestCase
{
    public function testInsert()
    {
        $mock = $this->getMockBuilder('Database')
                     ->getMock();

        $mock->expects($this->once())
             ->method('insert')
             ->will($this->returnValue(true));

        $myDatabase = new MyDatabase($mock);
        $result = $myDatabase->insert('username', '123456');
        $this->assertTrue($result);
    }
}

class MyDatabase {
    private $database;

    public function __construct($database) {
        $this->database = $database;
    }

    public function insert($username, $password)
    {
        return $this->database->insert('users', [
            'username' => $username,
            'password' => md5($password),
        ]);
    }
}

class Database {
    public function insert($table, $data) {
        // Insert data into the database
    }
}

Im obigen Testfall verwenden wir die Methode getMockBuilder(), um ein Mock-Objekt der Database-Klasse zu erstellen und das Verhalten des Mock-Objekts anzugeben. In der testInsert()-Methode erstellen wir ein MyDatabase-Objekt und übergeben das Mock-Objekt über den Konstruktor an das MyDatabase-Objekt. In der Methode insert() von MyDatabase rufen wir die Methode insert() des Mock-Objekts auf.

Zusammenfassung

Bei der Verwendung von PHPUnit für automatisierte Tests wird empfohlen, zuerst den Testcode und dann den Implementierungscode zu schreiben, um die Testabdeckung zu verbessern. Beim Schreiben von Testfällen sollten Sie möglichst viele Szenarien und Anwendungsfälle abdecken. Gleichzeitig können Sie auch Funktionen wie Datenprovider und Mock-Objekte nutzen, um Testfälle zu optimieren und die Testeffizienz zu verbessern.

Das obige ist der detaillierte Inhalt vonPHP-Entwicklung: Automatisiertes Testen mit PHPUnit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn