ホームページ  >  記事  >  バックエンド開発  >  PHPUNIT テストにはシングルトン クラスに関連する問題が含まれます

PHPUNIT テストにはシングルトン クラスに関連する問題が含まれます

WBOY
WBOYオリジナル
2016-06-13 13:50:11860ブラウズ

PHPUNIT テストにはシングルトン クラスの問題が含まれます。
クラス A はシングルトンであり、static public $CI; 属性があり、
static public 関数 &get_ci()
{
if ( !self:: $ CI )
{
self::$CI = &get_instance();
}

return self::$CI;
}
メソッド。

クラス B がクラス A を呼び出します
クラス A $CI がクラス B になります

そして、phpunit が複数のテスト ケースを継続的に実行するため
、クラス A の $CI は常に同じになります。

クラス C はクラス A を呼び出します
返された $CI はクラス B のインスタンスでもあります

クラス B には $abc 属性があり、クラス B が呼び出されたときの属性は 123 であるためです。
クラス C にも $abc 属性があり、これはすでに 456 ですが、クラス C がクラス A を呼び出すとき、クラス A の $CI->abc は依然として 123 です
しかし、私はそれが 456 になると予想しています。

この状況は phpunit でのみ発生します。テスト ケースの完了後にすべての変数オブジェクトがクリアされないためです。通常の使用プロセスであれば、クラスを呼び出す前にクラス C が存在しないため、この問題は発生しません。 B.

-----解決策---------

ディスカッション

実際、シングルトンであるクラス D、E、F がいくつかあり、内部の $CI は保護またはプライベートであるため、手動でクリアすることはできません
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。