現在の位置: ホーム> 最新記事一覧> phpunitのさまざまなコールバックの比較をシミュレートします

phpunitのさまざまなコールバックの比較をシミュレートします

M66 2025-05-17

ユニットテストでは、異なるコールバック関数のアクションの下で収集操作をテストする必要がある場合があります。 Phpunitは、特にキー名がカスタムコールバックと比較されることが多い配列またはコレクションの処理の場合、関数の動作をシミュレートして検証するための豊富なツールを提供します。この記事では、phpunitでさまざまなコールバック関数をシミュレートする方法を示し、キー名の比較シナリオを実装します。

1。問題の背景

キーがランダムであり、不規則なデータを表す可能性のある配列があるとします。これらの配列を並べ替える必要がありますが、順序付けルールではキーのサイズを直接比較するのではなく、異なるコールバック関数を使用して比較ロジックを動的に指定します。

たとえば、キー名のアルファベット順の順序でソートしたり、キー名の長さでソートしたり、特定のビジネスルールに基づいてソート順序を決定したりすることもできます。

2。phpunitを使用したコールバック関数をテストします

この関数をテストするために、コールバック関数をシミュレートして、コールバックが予想どおりキー名を比較するかどうかをphpunitで確認できます。

次のPHP関数があるとします。

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

この関数は、パラメーターとして配列とコールバック関数を取得し、 uksort()はコールバック関数に従って配列のキーをソートします。次に、さまざまなコールバック関数をシミュレートするPHPunitテストを書きます。

3. 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つのテストケースを記述します。それぞれが異なるコールバック関数をシミュレートして、配列のソートをテストします。

  1. testSortByLength :キー名の長さでソートします。

  2. testsortalphabetyally :アルファベット順に並べ替えます。

  3. testSortByCustomLogic :カスタム比較ロジック(逆ソートなど)を使用します。

4. phpunitテストを実行します

これらのテストは、phpunitコマンドラインツールを使用して実行できます。

 php vendor/bin/phpunit tests/CustomSortTest.php

すべてがうまくいった場合、すべてのテストが渡され、異なるコールバック関数の下でキー名を正しく比較したことを示します。

5。概要

この記事では、キー名の比較のためにPHPunitでさまざまなコールバック関数をシミュレートする方法を示しています。 uksort()呼び出し可能なコールバック関数を使用することにより、配列のソート方法を制御し、phpunitを使用して、ソートロジックが予想どおりに機能することを確認する柔軟性があります。

このアプローチを使用すると、より複雑な配列操作とソートを実装するための実際のニーズに応じて、さまざまな比較関数を簡単にシミュレートできます。