phpunit:非公開変数に関するアサーションを行う
-
30-10-2019 - |
質問
私有地と関連する公共のゲッターとセッターを備えたクラスがあるとします。セッターが使用された後、またはゲッターが正しいプロパティを返すと、プロパティが正しい値を取得することをphpunitでテストしたいと思います。
もちろん、ゲッターを使用してオブジェクトが正しい値を保存していることを確認してセッターをテストできます。ただし、これは私有財産が設定されていることを保証するものではありません。
次のクラスがあったとします。プロパティ、ゲッター、セッターを作成しました。しかし、私はプロパティ名でタイプミスをしたので、ゲッターとセッターは実際に操作することを意図したプロパティを操作しません
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);
それは出力されます:
文字列(6)「ジェラルド」
文字列(6)「ジェラルド」
phpunitから私有地にアクセスできる方法はありますか?
それとも、テスト中のオブジェクトのプライベート状態にアクセスしようとすることなく、このような問題をキャッチするためにテストでやるべきことがありますか?
正しい解決策はありません
所属していません StackOverflow