1

私はこのSOの質問を知っていますが、より一般的な用語で主題を扱っています.

依存性注入よりも部分モックの使用を優先する必要がありますか? 私の質問は、OCMock からの次の引用に基づいています。

id aMock = [OCMockObject partialMockForObject:anObject]

anObject と同じ方法で使用できるモック オブジェクトを作成します。スタブ化されていないメソッドが呼び出されると、anObject が転送されます。スタブ化されたメソッドが、モックではなく anObject への参照を使用して呼び出された場合でも、モックによって処理されます。

これは、(プロパティの) 依存関係をコンストラクターに (またはセッター インジェクションを介して) 注入する代わりに、部分的なモックを使用してスタブ化できることを意味します。

4

1 に答える 1

3

特に単体テストや動的モックをサポートするためではなく、汎用 API として意味をなすように API を設計する必要があります。

あなたが提案するパターンは、メソッドがプロパティであることを除いて、テンプレートメソッド設計パターンの単なるバリエーションです。一般に、依存関係へのアクセスを仮想プロパティとして実装することが理にかなっていると思われる場合は、説明した手法を使用できます。これはよく知られた単体テスト手法で、 extract と overrideと呼ばれます。

ただし、他の多くの理由でこれを行うことはできません。

  • 依存関係をオーバーライドできたとしても、デフォルトでは「実際の」意図した依存関係への参照が引きずり込まれ、必要以上に緊密な結合が作成される場合があります。
  • を抽出してオーバーライドするのを忘れた場合、デフォルトの依存関係が使用されますが、それは望ましくない場合があります。使用目的を明示した方がよい場合もあります。
于 2009-10-13T11:48:48.477 に答える