Dans les tests unitaires, nous devons parfois tester les opérations de collecte sous l'action de différentes fonctions de rappel. PHPUnit fournit une multitude d'outils pour simuler et vérifier le comportement des fonctions, en particulier lors du traitement des tableaux ou des collections, où les noms de clés sont souvent comparés aux rappels personnalisés. Cet article montrera comment simuler différentes fonctions de rappel dans PHPUnit pour implémenter les scénarios de comparaison des noms de clé.
Supposons que nous ayons un tableau où les clés sont aléatoires et que nous pouvons représenter certaines données irrégulières. Nous devons trier ces tableaux, mais les règles de commande ne comparent pas directement la taille des clés, mais utilisent différentes fonctions de rappel pour spécifier dynamiquement la logique de comparaison.
Par exemple, nous pourrions vouloir trier dans l'ordre alphabétique des noms de clés, ou trier par la durée des noms de clés, ou même décider de l'ordre de tri sur certaines règles métier.
Pour tester cette fonction, nous pouvons simuler une fonction de rappel pour vérifier dans PHPUnit si le rappel compare les noms de clés comme prévu.
Supposons que nous ayons la fonction PHP suivante:
function customSort(array $array, callable $callback): array {
uksort($array, $callback);
return $array;
}
Cette fonction prend un tableau et une fonction de rappel comme paramètres, et uksort () trie les touches du tableau en fonction de la fonction de rappel. Ensuite, nous rédigerons un test PHPUnit qui simule différentes fonctions de rappel.
Dans les tests PHPUnit, nous pouvons utiliser les méthodes CreateMock () ou Callback () pour simuler différentes fonctions de rappel. Voici un exemple de la façon de simuler différents rappels et de tester la fonction CustomSort () .
use PHPUnit\Framework\TestCase;
class CustomSortTest extends TestCase {
public function testSortByLength() {
$array = [
'apple' => 'fruit',
'banana' => 'fruit',
'kiwi' => 'fruit',
'grape' => 'fruit',
];
// Fonction de rappel qui simule le tri de la longueur du nom de clé
$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',
];
// Simuler les fonctions de rappel triées par ordre alphabétique
$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',
];
// Simuler les fonctions de rappel triées dans l'ordre alphabétique inverse
$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));
}
}
Dans cet exemple, nous écrivons trois cas de test, chacun simulant une fonction de rappel différente pour tester le tri du tableau:
TestSortByLength : Triez par la longueur du nom de la clé.
Testsortalphabétiquement : trier alphabétiquement.
TestSortByCustomLogic : utilisez la logique de comparaison personnalisée (comme le tri inverse).
Nous pouvons exécuter ces tests via l'outil de ligne de commande PHPUnit:
php vendor/bin/phpunit tests/CustomSortTest.php
Si tout se passe bien, tous les tests passeront, indiquant que nous avons correctement comparé les noms de clés sous différentes fonctions de rappel.
Cet article montre comment simuler différentes fonctions de rappel dans PHPUnit pour la comparaison du nom de clé. En utilisant des fonctions de rappel Uksort () et appelant , nous avons la flexibilité de contrôler la façon dont les tableaux sont triés et d'utiliser PHPUnit pour vérifier que notre logique de tri fonctionne comme prévu.
Avec cette approche, vous pouvez facilement simuler différentes fonctions de comparaison en fonction des besoins réels pour implémenter des opérations et un tri plus complexes.