Mockeryグローバル設定
設定を多少変更できるように、Mockeryは主な振る舞いの小さなサブセットを保持する、シングルトンの設定オブジェクトを使用しています。現在、3項目用意しています。
- 実際に存在ができない(例えば未使用)のメソッドに対するモックを許可/非許可へ指定するオプション。
- 内部PHPメソッドに対するパラメータマップを追加するためのセッター/ゲッター。(
Reflection
では自動的に突き止められない。)
最初の動作はデフォルトで許可されています。もちろん、これにより意図しない副作用を引き起こしてしまう状況はあり得ます。存在しないメソッドに対するモックは、特に多少の統合テスト(オブジェクト結合のテスト)も実行されない場合、実際の実装と同期していない実クラス/オブジェクトに基づいたモックを許してしまいます。
この振る舞いの許可/不許可を指定するには、次のように呼び出してください。(テストスーツ全体、もしくは限定されたテストのみにかかわらず)
\Mockery::getConfiguration()->allowMockingNonExistentMethods(bool);
Trueを指定した場合はこの振る舞いを許可します。Falseでは非許可にします。指定し直すまで、すぐに有効になります。許可されない場合が生じると、この振る舞いはその時点で例外を投げます。この振る舞いを非許可にするということは、少なくともMockeryの柔軟性が損なわれてしまうため、十分に考慮してください。
残りの2つを見てみましょう。
\Mockery::getConfiguration()->setInternalClassMethodParamMap($class, $method, array $paramMap)
\Mockery::getConfiguration()->getInternalClassMethodParamMap($class, $method)
これらはPHP内部クラス(例えばSPLや。ext/mongoのMongoCollection PECL拡張クラス)に対する引数を定義(例えばそれぞれ文字列であるとか)するために使用します。リフレクションは内部クラスの引数を分析できません。ほとんどの場合、みなさんがこれを使用する必要は全くありません。主に必要となるのは、内部クラスのメソッドが参照渡しを使用している場合です。この場合、Mockeryは内部クラスに対し自動的に追加しないため、引数の指定に&
を正しく含めてください。