ユニットテストでは、異なるコールバック関数のアクションの下で収集操作をテストする必要がある場合があります。 Phpunitは、特にキー名がカスタムコールバックと比較されることが多い配列またはコレクションの処理の場合、関数の動作をシミュレートして検証するための豊富なツールを提供します。この記事では、phpunitでさまざまなコールバック関数をシミュレートする方法を示し、キー名の比較シナリオを実装します。
キーがランダムであり、不規則なデータを表す可能性のある配列があるとします。これらの配列を並べ替える必要がありますが、順序付けルールではキーのサイズを直接比較するのではなく、異なるコールバック関数を使用して比較ロジックを動的に指定します。
たとえば、キー名のアルファベット順の順序でソートしたり、キー名の長さでソートしたり、特定のビジネスルールに基づいてソート順序を決定したりすることもできます。
この関数をテストするために、コールバック関数をシミュレートして、コールバックが予想どおりキー名を比較するかどうかをphpunitで確認できます。
次のPHP関数があるとします。
function customSort(array $array, callable $callback): array {
uksort($array, $callback);
return $array;
}
この関数は、パラメーターとして配列とコールバック関数を取得し、 uksort()はコールバック関数に従って配列のキーをソートします。次に、さまざまなコールバック関数をシミュレートするPHPunitテストを書きます。
phpunitテストでは、 createmock()またはcallback()メソッドを使用して、さまざまなコールバック関数をシミュレートできます。さまざまなコールバックをシミュレートし、税関()関数をテストする方法の例を次に示します。
use PHPUnit\Framework\TestCase;
class CustomSortTest extends TestCase {
public function testSortByLength() {
$array = [
'apple' => 'fruit',
'banana' => 'fruit',
'kiwi' => 'fruit',
'grape' => 'fruit',
];
// キー名の長さのソートをシミュレートするコールバック関数
$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',
];
// アルファベット順にソートされたコールバック関数をシミュレートします
$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',
];
// 逆アルファベット順にソートされたコールバック関数をシミュレートします
$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));
}
}
この例では、3つのテストケースを記述します。それぞれが異なるコールバック関数をシミュレートして、配列のソートをテストします。
testSortByLength :キー名の長さでソートします。
testsortalphabetyally :アルファベット順に並べ替えます。
testSortByCustomLogic :カスタム比較ロジック(逆ソートなど)を使用します。
これらのテストは、phpunitコマンドラインツールを使用して実行できます。
php vendor/bin/phpunit tests/CustomSortTest.php
すべてがうまくいった場合、すべてのテストが渡され、異なるコールバック関数の下でキー名を正しく比較したことを示します。
この記事では、キー名の比較のためにPHPunitでさまざまなコールバック関数をシミュレートする方法を示しています。 uksort()と呼び出し可能なコールバック関数を使用することにより、配列のソート方法を制御し、phpunitを使用して、ソートロジックが予想どおりに機能することを確認する柔軟性があります。
このアプローチを使用すると、より複雑な配列操作とソートを実装するための実際のニーズに応じて、さまざまな比較関数を簡単にシミュレートできます。