PHPでは、 array_diff()は、最初の配列に存在するが他の配列には存在するアレイと戻り値の差を比較するための非常に実用的な関数です。さまざまなシナリオでコードが正しく実行されるようにするために、テスト環境でarray_diff()のさまざまな入力条件と出力条件をシミュレートして検証する必要があります。この記事では、そのようなテストを効果的に実行する方法を理解するために段階的に説明します。
array_diff()の関数プロトタイプは次のとおりです。
array array_diff(array $array, array ...$arrays)
この関数は、他の$配列には表示されない$配列のすべての値を含む配列を返します(キー名ではなく、値のみを比較します)。
$a = ['apple', 'banana', 'cherry'];
$b = ['banana', 'grape'];
$result = array_diff($a, $b);
// 出力:['apple', 'cherry']
array_diff()が組み込み関数であっても、その動作に完全に頼ることができるという意味ではありません。実際の開発では、キー名、多次元配列、混合タイプの値などのさまざまな複雑な構造に渡ることが多いため、テストは役立ちます。
タイプエラーを避けてください
関数の動作の境界を理解します
ビジネスロジックは特定の動作に依存していることを確認します
次の2つの方法を使用して、テスト環境を構築できます。
次のツールですばやく構築できます。
XAMPPまたはMAMP
PHPビルトインサーバー:
php -S localhost:8000
たとえば、 https://sandbox.m66.net/php-testでコードスニペットを実行して、ロジックをすばやく確認します。
最も一般的なユースケースから境界ケースまで1つずつテストします。
$a = ['red', 'green', 'blue'];
$b = ['green', 'yellow'];
$result = array_diff($a, $b);
print_r($result);
// 预期出力:['red', 'blue']
$a = ['a' => 'apple', 'b' => 'banana'];
$b = ['x' => 'banana'];
$result = array_diff($a, $b);
print_r($result);
// 预期出力:['a' => 'apple'],元のキー名を保管してください
$a = [1, '2', 3];
$b = ['1', 2];
$result = array_diff($a, $b);
print_r($result);
// 出力:多分 [0 => 1, 2 => 3],なぜなら、それを比較するときは、非厳格なタイプだからです
$a = ['php', 'js', 'python'];
$b = ['js'];
$c = ['python'];
$result = array_diff($a, $b, $c);
print_r($result);
// 出力:['php']
$a = [];
$b = ['x', 'y'];
$result = array_diff($a, $b);
print_r($result);
// 出力:空の配列 []
$a = ['apple', 'banana', 'apple'];
$b = ['banana'];
$result = array_diff($a, $b);
print_r($result);
// 出力:['apple', 'apple']
phpunitを使用してテスト方法を作成して、動作を自動的に検証できます。
use PHPUnit\Framework\TestCase;
class ArrayDiffTest extends TestCase
{
public function testStringDiff()
{
$a = ['a', 'b', 'c'];
$b = ['b'];
$this->assertEquals(['a', 'c'], array_values(array_diff($a, $b)));
}
public function testMixedTypes()
{
$a = [1, '2', 3];
$b = ['1', 2];
$expected = [0 => 1, 2 => 3];
$this->assertEquals($expected, array_diff($a, $b));
}
public function testEmptyArray()
{
$a = [];
$b = ['x'];
$this->assertEmpty(array_diff($a, $b));
}
}
テスト環境でさまざまな種類の入力をock笑することにより、 array_diff()がどのように動作するかを深く理解することができます。このプロアクティブなテストプロセスは、潜在的な問題を特定するのに役立つだけでなく、より堅牢なコードの書き込みにも役立ちます。特に大規模プロジェクトでは、安定したデータ構造と信頼できる差動処理機能が、データの比較やスクリーニングなどのロジックの基礎となります。
覚えておいてください:テストは時間の無駄ではありませんが、将来のデバッグ時間を節約します。