シングルトンクラスをインスタンス化できないようにテストケースを作成しようとしています。シングルトンのコンストラクタは次のように私のテストがある民間ように定義されていますPHPでのsimpletestでの致命的なエラーの発生方法
$this->expectError();
$test = new TestSingletonClassA();
代わりのエラーをキャッチし、試験に合格し、私は「PHPの致命的なエラーが発生します:プライベートシングルトンに呼び出し:: __構築物( ) '。私はまた、expectErrorのパラメータとしてPatternExpectationを渡そうとしましたが、どちらもうまくいきませんでした。何か提案はありますか?
いくつかの背景:PHP5.3、simpletest1.1a
このような状況では、テストケースではなく、正しいデザインに焦点を当てる必要があります。私の実装では、シングルトンは抽象クラスなので、サブクラスがパブリックコンストラクタを実装できないようにするために、プライベートコンストラクタをオーバーライドする方法が必要です。私はこれを行うことができる方法はありますか? –
私はそうは考えていませんが、コンストラクタが呼び出されないようにするための他の方法があります。 1つの方法は、インスタンス化されたクラスを追跡している配列を持つことです。もう1つは、debug_stacktraceを使用して、コールスタックがいくつかのget_instanceメソッドから来ていることをチェックすることです。両方の戦略が基本クラスのコンストラクタ内で適用されます。また、私はあなたの基本クラスのコンストラクタを保護する必要があると思う、またはサブクラスのコンストラクタはおそらく親を呼び出すことができなくなります:: __ construct – davogotland