29

次のメソッドと同等のものは何ですか。

@Mock
MyType1 myType1;

@Autowired
@InjectMocks
MyType2 myType2;

に置き換えることができ@Mockますmock(MyType1.class)

しかし、どうすれば@InjectMocksメソッド呼び出しに置き換えることができますか?このようなもの:

injectMocks(MyType2.class)
4

2 に答える 2

16

Mockito にはモック インジェクション用のパブリック API はありません。さらに、この注釈は主にテストでの配置方法に基づいて駆動されるため、テストの初期化フェーズにかなり関連しています。

ただし、将来のある時点で変更される可能性があります。

ただし、Mockito の注釈付きフィールドは、MockitoJUnitRunnerまたは によって初期化できますMockitoAnnotations.initMocks()。どちらもモック インスタンスを作成し、インジェクションを実行します。

また、あなたが使用しているコードが表示されます@Autowired-したがって、おそらくXML経由で構成された春のものです。@InjectMocks開発は統合テストではなく単体テストのユースケースによって行われたため、他の依存性注入フレームワークと連携するように実際に開発されたわけではありません。

springockitoは、Spring でのMockitoモックの作成を容易にする別のプロジェクトです。

それが役立つことを願っています

于 2012-10-12T08:05:24.227 に答える
7

Autowiredjunit テストで使用する理由 依存関係をモックしているためMyType2、テストを作成するときにその具体的な実装を知っておく必要があります。

MyType2次に、テストするインスタンスを作成するために、Spring または任意のインジェクション フレームワークを使用する必要はありません。テストの初期化で直接作成してください! 何年も IoC フレームワークを使用していると、書くのmyType2 = new MyType2Impl(mock(myType1.class))が難しいことはわかっていますが、実際にはテストがより簡単かつ高速になります (アプリケーション コンテキストを構築する必要がないため)。例えば:

@Before
public void setup() {
  myType1 = mock(MyType1.class);
  myType2 = new MyType2Impl(myType1);
}

しかし、junit テストで本当に IoC を使用したい場合は、Brice が提案したspringockitoMyType1を使用し、アプリケーション コンテキストでモックを作成します。

于 2012-10-12T12:41:07.417 に答える