Aktueller Standort: Startseite> Neueste Artikel> So testen Sie eine Datenbankmethode mit STMT_INIT

So testen Sie eine Datenbankmethode mit STMT_INIT

M66 2025-05-17

Während der PHP -Entwicklung ist es üblich, MySQLI -Erweiterungen für Datenbankoperationen zu verwenden. Die MySQLI :: STMT_INIT -Funktion wird verwendet, um eine Vorverarbeitungserklärung zu initialisieren, die sehr wichtig ist, um die Sicherheit und Effizienz von SQL -Abfragen zu verbessern. Bei der Durchführung von Unit -Tests wird jedoch aufgrund der Existenz von Datenbankverbindungen die Datenbankbetriebsmethode mit MySQLI :: STMT_INIT effektiv getestet, die die Funktion von MySQLI :: STMT_INIT enthält, zu einem schwierigen Problem.

In diesem Artikel wird der Einheitstest in PHP eingeführt, insbesondere zum Testen von Datenbankbetriebsmethoden , die MySQLI :: STMT_INIT enthalten. Wir werden PHP -Unit -Tests Framework - Phpunit verwenden und einige Mock -Objekte und Datenbanksimulationstools kombinieren, um Datenbankvorgänge zu simulieren und eine direkte Interaktion mit der Datenbank zu vermeiden.

1. Erstellen Sie eine Datenbankbetriebsklasse

Zunächst erstellen wir eine einfache Datenbank -Operation -Klasse, die eine Datenbank -Betriebsmethode mit MySQLI :: STMT_INIT enthält. Das Codebeispiel lautet wie folgt:

 <?php
class Database
{
    private $connection;

    public function __construct($host, $username, $password, $dbname)
    {
        $this->connection = new mysqli($host, $username, $password, $dbname);
        if ($this->connection->connect_error) {
            die("Connection failed: " . $this->connection->connect_error);
        }
    }

    public function prepareAndExecute($query, $params)
    {
        $stmt = $this->connection->stmt_init();

        if ($stmt->prepare($query)) {
            $stmt->bind_param(...$params);
            $stmt->execute();
            return $stmt->get_result();
        } else {
            throw new Exception('Query preparation failed');
        }
    }
}

In dieser Klasse verwendet die PrepareAndExecute -Methode die Funktion mySQLI :: STMT_INIT, um eine Vorverarbeitungsanweisung zu initialisieren und die eingehende SQL -Abfrage auszuführen.

2. Schreiben Sie Unit -Tests

Um diese Datenbankbetriebsklasse zu testen, müssen wir die Funktion MySQLI :: STMT_INIT und zugehörige Datenbankoperationen simulieren. Wir verwenden Phpunit und Spott, um ein verspottetes MySQLI -Objekt zu erstellen, um beim Testen echte Datenbankinteraktionen zu vermeiden.

Hier ist der Unit -Testcode:

 <?php
use PHPUnit\Framework\TestCase;
use Mockery;

class DatabaseTest extends TestCase
{
    private $db;
    private $mockConnection;

    public function setUp(): void
    {
        $this->mockConnection = Mockery::mock('mysqli');
        $this->db = new Database('localhost', 'user', 'password', 'test_db');
        $this->db->connection = $this->mockConnection;
    }

    public function testPrepareAndExecute()
    {
        // Mock stmt_init to return a mocked statement object
        $mockStmt = Mockery::mock('mysqli_stmt');
        $this->mockConnection->shouldReceive('stmt_init')->once()->andReturn($mockStmt);

        // Mock the prepare method to return true
        $mockStmt->shouldReceive('prepare')->once()->andReturn(true);
        $mockStmt->shouldReceive('bind_param')->once();
        $mockStmt->shouldReceive('execute')->once();
        $mockStmt->shouldReceive('get_result')->once()->andReturn(true);

        // Call the method
        $result = $this->db->prepareAndExecute('SELECT * FROM users WHERE id = ?', ['i', 1]);

        // Assert that the result is true
        $this->assertTrue($result);
    }

    public function tearDown(): void
    {
        Mockery::close();
    }
}

In diesem Test verwenden wir Mockery , um MySQLI- und MySQLI_STMT -Objekte zu simulieren, und prüfen, ob die Vorbereitungsmethode korrekt vorbereitet , Bind_param , Ausführung und andere Vorgänge ausführt.

3. Führen Sie den Test aus

Stellen Sie sicher, dass Sie Phpunit und Spott installiert haben. Sie können es über den folgenden Befehl installieren:

 composer require --dev phpunit/phpunit mockery/mockery

Dann können Sie den Test ausführen:

 php vendor/bin/phpunit DatabaseTest.php

Wenn der Test besteht, sehen Sie eine ähnliche Nachricht wie folgt:

 OK (1 test, 1 assertion)

4. Schlussfolgerung

Durch die Verwendung des Mock -Objekts und des Phpunit -Frameworks können wir die Datenbankbetriebsmethode mit MySQLI :: STMT_INIT effektiv testen, ohne mit der tatsächlichen Datenbank zu interagieren. Auf diese Weise können wir die Richtigkeit der Datenbankbetriebslogik sicherstellen und gleichzeitig eine Abhängigkeit von der Verfügbarkeit der Datenbank in Unit -Tests vermeiden.

Das obige ist eine Einführung in das Testen der Datenbankbetriebsmethode mit der MySQLI :: STMT_INIT -Funktion. Ich hoffe, dieser Artikel kann Ihnen helfen und es Ihnen ermöglichen, PHP -Unit -Tests effizienter durchzuführen.

Verwandte Links