1

テストしようとしている一連のクラスがあります。クラス A はクラス X に依存します。クラス X には、ランダムなことやデータベースを使用することを行う関数が含まれています。依存関係なしでクラス A をテストするために、必要なものを正確に返すクラス X のモック バージョンを作成しました。

それで、私の質問は、同じ名前とファイル名を持つモックバージョンを既に含めているので、クラス X をどのようにテストするのかということです。「クラス X を再宣言できません」というエラーが表示されます。

スタブ化されたオブジェクトをテスト対象のクラスに渡す方法がないため、スタブを使用できないと思います。テスト対象のクラス (Class A) は、静的クラスのインスタンスを要求します (ClassA::getInstance();)。

クラスXのモックバージョンを含むファイルをアンインクルードできないため、これはテストスイートまたはテストケースと関係がありますか.

よろしくお願いいたします。

マイク

4

2 に答える 2

1

PHP でファイル/クラスをアンインクルードすることはできないため、クラスは別の名前を使用するか、それらの名前空間を指定する必要があります。スタブ クラスの使用に関しては、使用できる 2 つの方法があります。依存関係を含むインスタンス/クラス変数を使用して、それらを交換できるようにします。お気に入り

self::$_classes['classA']::methodCall();
$this->_classes['classA']::methodCall();

これにより、静的が本当に必要な場合に、実行時にクラスの依存関係を変更できます。もう 1 つのアプローチは、静的クラスを使用せず、symfony コンポーネントに見られるような依存性注入コンテナーを使用することです。インジェクション コンテナを使用すると、必要に応じてモックをインジェクトすることもできます。

于 2009-11-16T15:04:44.937 に答える
0

スタブ化されたオブジェクトをテスト対象のクラスに渡す方法はありません。

これは、クラス A がクラス X を強く参照していることを意味します。個人的には、Class X モックアップの名前を実際のモックアップに変更することをお勧めします (例: X_MockUp)。それをテスト フォルダー階層に入れてから、テストする Class A に渡します。現時点では不可能かもしれませんが、アーキテクチャを変更してください! より柔軟でテストしやすいものになります。

2 つのファイルに同じクラス名があり、それらを区別する必要があるため、このエラーが発生します。

于 2009-11-16T15:01:16.860 に答える