1

シングルトンクラスをインスタンス化できないことを確認するためのテストケースを作成しようとしています。シングルトンのコンストラクターはプライベートに定義されているので、私のテストは次のとおりです。

$this->expectError();
$test = new TestSingletonClassA();

エラーをキャッチしてテストに合格する代わりに、「PHP Fatal error:Call to private Singleton :: __construct()」が表示されます。また、expectErrorへのパラメーターとしてPatternExpectationを渡そうとしましたが、それも機能しませんでした。何か提案はありますか?

いくつかの背景:php5.3、simpletest1.1a

4

3 に答える 3

0

phpコードが致命的なエラーをスローした場合、phpunitに到達することはないため、テストするには「正しい」コードを記述する必要があります。プライベートメソッドを呼び出すと、例外がスローされるため、phpunitに到達しません。あなたはそれを変えなければなりません。

オブジェクトをモックする必要があると思います。このテーマに関するこれらの投稿(一連の4つの投稿)とこれらのスライド(スライド#43から)を試してください。

于 2011-01-06T02:30:38.957 に答える
0

単体テスト フレームワークは、そのようなことをキャッチできません。ただし、PHPTや同様の回帰テスト フレームワークを使用すれば可能です。

これを PHPUnit にフックするには、いくつかの手順を踏まなければならないかもしれませんが、残りのテストと統合する方法はおそらくあるでしょう。アサーションと、致命的なエラーが予想される特別なケースを分離する必要があります。

于 2011-01-06T02:38:18.960 に答える
-1

そのようにすることは不可能だと思います..私が理解しているように、致命的なエラーはキャッチできません。リフレクションを使用してコンストラクター メソッドを取得し、アクセス修飾子が "private" であることを確認します。

これは、ほとんどの言語でテストするのが困難です。たとえば、Java、C#、および C++ では、このコードをコンパイルすることさえできません。したがって、まったく実行できませんでした D:

于 2011-01-06T02:21:18.027 に答える