1
0

More than 3 years have passed since last update.

[PHP] TraitのUnitテスト

Last updated at Posted at 2021-09-03

PHPのtraitのユニットテストを書く方法です。

public関数

以下のようなtraitpublicな関数を考えます。

<?php

trait SomeTrait
{
    public function greet(): string
    {
        return 'hello';
    }
}

traitを取り込んだテスト用のクラスを作ることでテストができます。

class TestTraitClass
{
    use SomeTrait;
}

-----

// チェック
$SUT = new TestTraitClass();
self::assertEquals('hello', $SUT->greeet());

もしくは、無名クラスでもOK。

$SUT = new class() { use SomeTrait; };
self::assertEquals('hello', $SUT->greeet());

protected関数

以下のように、テストしたいメソッドがprotectedな関数のときは一工夫が必要です。

<?php

trait SomeTrait
{
    protected function protectedGreet(): string
    {
        return 'hello';
    }
}

やることとしては、traitを取り込んだテスト用のクラスを作る時に、traitのメソッドをpublicでオーバーライドします。

皆れない構文ですが、traituseするときに{}で囲うことで、traitのメソッドに別名をつけることができます。
あとは、テストしたいメソッドと同名のメソッドをpublicで定義し、別名をつけたprotectedtraitのメソッドに処理を委譲すればOKです。

class TestTraitClass
{
    use SomeTrait {
        protectedGreet as protected traitMethod;
    };

    public function protectedGreet(): string
    {
        return $this->traitMethod();
    }
}

終わりに

protected関数をテストしたくなること自体どうなの?って気持ちはあるけど、知ってて損はないかも。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0