Aktueller Standort: Startseite> Neueste Artikel> Simulieren Sie den Vergleich verschiedener Rückrufe in Phpunit

Simulieren Sie den Vergleich verschiedener Rückrufe in Phpunit

M66 2025-05-17

Bei Unit -Tests müssen wir manchmal die Sammlungsvorgänge unter der Aktion verschiedener Rückruffunktionen testen. PHPUnit bietet eine Fülle von Tools, um das Verhalten von Funktionen zu simulieren und zu überprüfen, insbesondere bei der Verarbeitung von Arrays oder Sammlungen, bei denen die Schlüsselnamen häufig mit benutzerdefinierten Rückrufe verglichen werden. In diesem Artikel wird angezeigt, wie verschiedene Rückruffunktionen in Phpunit simulieren, um den Vergleichsszenarien für Schlüsselnamen zu implementieren.

1. Problemhintergrund

Angenommen, wir haben ein Array, in dem die Schlüssel zufällig sind und möglicherweise einige unregelmäßige Daten darstellen. Wir müssen diese Arrays sortieren, aber die Bestellregeln vergleichen nicht direkt die Größe der Schlüssel, sondern verwenden unterschiedliche Rückruffunktionen, um die Vergleichslogik dynamisch anzugeben.

Zum Beispiel möchten wir möglicherweise die alphabetische Reihenfolge der Schlüsselnamen sortieren oder nach den Schlüsselnamen sortieren oder sogar die Sortierreihenfolge auf der Grundlage bestimmter Geschäftsregeln entscheiden.

2. Testen Sie die Rückruffunktion mit Phpunit

Um diese Funktion zu testen, können wir eine Rückruffunktion simulieren, um zu überprüfen, ob der Rückruf die Schlüsselnamen wie erwartet vergleicht.

Angenommen, wir haben die folgende PHP -Funktion:

 function customSort(array $array, callable $callback): array {
    uksort($array, $callback);
    return $array;
}

Diese Funktion nimmt ein Array und eine Rückruffunktion als Parameter auf, und UksSort () sortiert die Schlüssel des Arrays gemäß der Rückruffunktion. Als nächstes schreiben wir einen Phpunit -Test, der verschiedene Rückruffunktionen simuliert.

3. Schreiben Sie Phpunit -Tests

In Phpunit -Tests können wir die Methoden createMock () oder callback () verwenden, um verschiedene Rückruffunktionen zu simulieren. Hier ist ein Beispiel dafür, wie Sie verschiedene Rückrufe simulieren und die Funktion teadasort () testen.

 use PHPUnit\Framework\TestCase;

class CustomSortTest extends TestCase {

    public function testSortByLength() {
        $array = [
            'apple' => 'fruit',
            'banana' => 'fruit',
            'kiwi' => 'fruit',
            'grape' => 'fruit',
        ];

        // Rückruffunktion, die die Länge des Schlüsselnamens simuliert
        $callback = function($a, $b) {
            return strlen($a) - strlen($b);
        };

        $sortedArray = customSort($array, $callback);

        $this->assertEquals(['kiwi' => 'fruit', 'apple' => 'fruit', 'grape' => 'fruit', 'banana' => 'fruit'], array_keys($sortedArray));
    }

    public function testSortAlphabetically() {
        $array = [
            'apple' => 'fruit',
            'banana' => 'fruit',
            'kiwi' => 'fruit',
            'grape' => 'fruit',
        ];

        // Simulieren Sie die Rückruffunktionen sortiert alphabetisch
        $callback = function($a, $b) {
            return strcmp($a, $b);
        };

        $sortedArray = customSort($array, $callback);

        $this->assertEquals(['apple' => 'fruit', 'banana' => 'fruit', 'grape' => 'fruit', 'kiwi' => 'fruit'], array_keys($sortedArray));
    }

    public function testSortByCustomLogic() {
        $array = [
            'apple' => 'fruit',
            'banana' => 'fruit',
            'kiwi' => 'fruit',
            'grape' => 'fruit',
        ];

        // Simulieren Sie die Rückruffunktionen in umgekehrter alphabetischer Reihenfolge sortiert
        $callback = function($a, $b) {
            return strcmp($b, $a);
        };

        $sortedArray = customSort($array, $callback);

        $this->assertEquals(['kiwi' => 'fruit', 'grape' => 'fruit', 'banana' => 'fruit', 'apple' => 'fruit'], array_keys($sortedArray));
    }
}

In diesem Beispiel schreiben wir drei Testfälle, von denen jede eine andere Rückruffunktion simuliert, um die Sortierung des Arrays zu testen:

  1. TestsortByLength : Sortieren Sie nach der Länge des Schlüsselnamens.

  2. Testsortalphabetisch : Sortieren Sie alphabetisch.

  3. TestsortByCustomlogic : Verwenden Sie die benutzerdefinierte Vergleichslogik (z. B. umgekehrte Sortierung).

4. Führen Sie Phpunit -Tests durch

Wir können diese Tests über das Phpunit -Befehlszeilen -Tool ausführen:

 php vendor/bin/phpunit tests/CustomSortTest.php

Wenn alles gut läuft, werden alle Tests bestehen, was darauf hinweist, dass wir die Schlüsselnamen unter verschiedenen Rückruffunktionen korrekt verglichen haben.

5. Zusammenfassung

In diesem Artikel wird angezeigt, wie verschiedene Rückruffunktionen in Phpunit für den Schlüsselnamenvergleich simulieren. Durch die Verwendung von UKSort () und Callable Callback -Funktionen können wir steuern, wie die Arrays sortiert werden, und verwenden Phpunit, um zu überprüfen, ob unsere Sortierlogik wie erwartet funktioniert.

Mit diesem Ansatz können Sie unterschiedliche Vergleichsfunktionen nach der tatsächlichen Bedürfnissen problemlos simulieren, um komplexere Array -Operationen und Sortierungen zu implementieren.