array_fill_keys関数の返品結果が単体テストで正しいかどうかを主張する方法は?
PHPでは、 array_fill_keysは、キーが指定された配列から生じる配列を作成し、各キーの値が同じ値に設定される非常に実用的な機能です。この関数の一般的な使用法は、キーが配列に存在することを確認し、キー価値ペアデータを処理するときに値を均一に割り当てることです。ユニットテストを実行するときは、関数が正しく戻ることを確認する必要がある場合があります。それでは、 array_fill_keysの返品結果がPHPユニットテストで正しいとどのように主張しますか?
array_fill_keys関数の基本的な使用法は次のとおりです。
array array_fill_keys ( array $keys , mixed $value )
$キー:各要素が新しい配列のキーとして使用される配列。
$値:各キーに対応する値。
例えば:
$keys = ['a', 'b', 'c'];
$value = 1;
$result = array_fill_keys($keys, $value);
print_r($result);
出力結果:
Array
(
[a] => 1
[b] => 1
[c] => 1
)
array_fill_keys関数の正しさをテストするために、単体テストにphpunitを使用できます。まず、phpunitがインストールされていることを確認し、正しいディレクトリにテストクラスを作成していることを確認してください。
array_fill_keysの機能をテストするために、 arrayhelpertestクラスを作成したとします。まず、単純なテストケースを記述して、機能が予想どおり正しい結果を返すことを確認できます。
use PHPUnit\Framework\TestCase;
class ArrayHelperTest extends TestCase
{
public function testArrayFillKeys()
{
// テストデータ
$keys = ['a', 'b', 'c'];
$value = 1;
// 電話 array_fill_keys
$result = array_fill_keys($keys, $value);
// 返されたアレイが予想されるものと一致しているかどうかを主張します
$expected = [
'a' => 1,
'b' => 1,
'c' => 1
];
$this->assertEquals($expected, $result);
}
}
上記のコードでは、最初にTestArrayFillkeysのテスト方法を定義し、 Assertequalsメソッドを使用して、 array_fill_keys関数の返された結果が予想されるArray $に等しいかどうかを主張します。
phpunitのインストールが完了した後、端末で次のコマンドを実行してユニットテストを実行できることを確認してください。
php vendor/bin/phpunit ArrayHelperTest
テストが通過すると、次のような出力が表示されます。
OK (1 test, 1 assertion)
Assertequalsに加えて、他のアサーションメソッドを使用して、 array_fill_keysの結果を検証することもできます。
Assertarrayhaskey :配列に特定のキーが含まれているかどうかを確認します。
$this->assertArrayHasKey('a', $result);
$this->assertArrayHasKey('b', $result);
$this->assertArrayHasKey('c', $result);
assertnotempty :返された配列が空でないかどうかを確認します。
$this->assertNotEmpty($result);
AssertSame :予想(タイプを含む)とまったく同じ配列の値を比較する必要がある場合は、 AssertSameを使用できます。
$this->assertSame([1, 1, 1], array_values($result));
URLを含むいくつかの状況をテストし、すべてのURLドメインをM66.NETに置き換える必要があると仮定すると、これを通常の式または単純な文字列置換で行うことができます。
function replaceDomain($url, $newDomain)
{
$parsedUrl = parse_url($url);
$parsedUrl['host'] = $newDomain;
return http_build_url($parsedUrl);
}
$newUrl = replaceDomain('http://example.com/path', 'm66.net');
echo $newUrl; // http://m66.net/path