Tech & Tips

PHPUnitのデータプロバイダとジェネレータ関数を使用したテストケースの作成術

この記事は2年以上前ですので、内容が古い可能性があります

はじめに

PHPUnitのデータプロバイダとは
アサーションを何度も書く必要がなくなる便利なアノテーションのこと。
PHPUnit マニュアル – 第2章 PHPUnit 用のテストの書き方

ジェネレータ関数とは
ジェネレータ関数は一度だけ値を返すのではなく、
必要に応じて何度でも値を変えて返すことができる便利な関数のこと。
PHP: ジェネレータの構文 - Manual

使い方を簡単な計算式のテストで比較

データプロバイダを使わない書き方

//引き算を行うファンクション
function sub($a, $b) {
    return $a - $b;
}

//テストファンクション
public function testSub()
{
        //テストデータの配列
    $patterns = [
        [1, 2, 1],
        [2, 3, 1],
        [5, 8, 3],
    ];

    foreach ($patterns as list($expected, $a, $b)) {
        $this->assertEquals($expected, sub($a, $b));
    }
}

メリット:
・ソースコードが短くかける
デメリット:
・どこでテストが落ちたかわかりにくい

データプロバイダのみの書き方

//引き算を行うファンクション
function sub($a, $b) {
    return $a - $b;
}

/**
 * @dataProvider provideSubitionTestParams
 * テストファンクション
 */
public function testSub($expected, $a, $b)
{
    $this->assertEquals($expected, sub($a, $b));
}

//テストデータを渡すデータプロバイダ用のファンクション
public function provideSubitionTestParams()
{
    return [
        [1, 2, 1],
        [2, 3, 1],
        [5, 8, 3],
    ];
}

メリット:
・どこで落ちたかわかりやすい
・setUp/tearDownが有効活用できる
→データプロバイダで記述すると、それぞれが1つのテスト扱いになるため、毎回setUp/tearDownが実行されます。
デメリット:
・ソースコードが長くなる

データプロバイダとジェネレータ関数を組み合わせた書き方

//引き算を行うファンクション
function sub($a, $b) {
    return $a - $b;
}

/**
 * @dataProvider provideSubitionTestParams
 * テストファンクション
 */
public function testSub($expected, $a, $b)
{
    $this->assertEquals($expected, sub($a, $b));
}

//テストデータを渡すデータプロバイダ用のファンクション
public function provideSubitionTestParams()
{
        //ジェネレータ関数でテストデータを定義
    yield "テストケース1" => [1, 2, 1];
    yield "テストケース2" => [2, 3, 1];
    yield "テストケース3" => [5, 8, 3];
}

メリット:
・どこで落ちたかわかりやすい
・setUp/tearDownが有効活用できる
→データプロバイダで記述すると、それぞれが1つのテスト扱いになるため、毎回setUp/tearDownが実行されます。
・メモリの節約になる
デメリット:
・ソースコードが長くなる

さいごに

データプロバイダとジェネレータ関数を組み合わせたことにより、
網羅的にかつ、大量のアサーションを書かずに可読性の高いテストコードがかけます。
自分なりにデータプロバイダを駆使して、
もっといい感じにテストしていきたい・・・

参考URL

PHPUnitとデータプロバイダとテストケース生成

この記事をシェアする:
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

私たちと一緒に働きませんか?

「PHPUnitのデータプロバイダとジェネレータ関数を使用したテストケースの作成術」はいかがでしたか?
株式会社プレスマンでは、 WordPressが大好きな方、仕事を通してさらにスキルを磨きたい方を募集しています。 まずは募集職種をご覧の上、お気軽にお問い合わせください。 あなたとお会いできるのを楽しみにしています。

採用情報を見る

-Tech & Tips

© 2024 PRESSMAN*Tech Powered by STINGER