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.
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.
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.
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:
TestsortByLength : Sortieren Sie nach der Länge des Schlüsselnamens.
Testsortalphabetisch : Sortieren Sie alphabetisch.
TestsortByCustomlogic : Verwenden Sie die benutzerdefinierte Vergleichslogik (z. B. umgekehrte Sortierung).
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.
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.