プライベート プロパティと関連付けられたパブリック ゲッターおよびセッターを持つクラスがあるとします。セッターが使用された後にプロパティが正しい値を取得すること、またはゲッターが正しいプロパティを返すことをPHPUnitでテストしたいと思います。
もちろん、ゲッターを使用してオブジェクトが正しい値を格納していることを確認することでセッターをテストできます。また、ゲッターをテストする場合はその逆も可能です。ただし、これはプライベート プロパティが設定されているものであることを保証するものではありません。
次のクラスがあったとします。プロパティ、ゲッター、セッターを作成しました。しかし、プロパティ名をタイプミスしたため、getter と setter は、操作するはずのプロパティを実際には操作しません。
class SomeClass
{
private
$mane = NULL; // Was supposed to be $name but got fat-fingered!
public function getName ()
{
return ($this -> name);
}
public function setName ($newName)
{
$this -> name = $newName;
return ($this);
}
}
次のテストを実行すると
public function testSetName ()
{
$this -> object -> setName ('Gerald');
$this -> assertTrue ($this -> object -> getName () == 'Gerald');
}
私はパスを取得します。しかし、私が望んでいない非常に悪いことが実際に起こりました。setName() が呼び出されると、実際には、プライベート プロパティが持っていると思っていた名前のクラスに新しいプロパティが作成されます。セッターが作成したものだけがパブリックです! 次のコードでそれを実証できます。
$a = new SomeClass;
$a -> setName('gerald');
var_dump ($a -> getName ());
var_dump ($a -> name);
次のように出力されます。
string(6) "ジェラルド"
string(6) "ジェラルド"
PHPUnit からプライベート プロパティにアクセスして、取得および設定されていると思われるプロパティが実際に取得および設定されていることを確認するテストを作成する方法はありますか?
または、テスト中のオブジェクトのプライベート状態にアクセスしようとせずに、このような問題をキャッチするためにテストで行うべきことは他にありますか?