2016-11-17 5 views
0

現在、データベースコンテキストに注入して正しいオブジェクトを取得するためのパラメータとして、そのメソッド内でコンストラクタを使用する複雑なシステムの単体テストを作成しようとしています正しい環境から。クラスのメソッド内でコンストラクタを模擬したMockito

これをエミュレートするMockitoを試してみて、データベースから試してみる代わりにテストオブジェクトを返すようにしてください。しかし、私は伝統的なテクニックと@InjectMocks + @Mockアノテーションで動作させる方法については困惑しています。

コードの本質は以下の通りです:私はこのFooFinderオブジェクトをモックと私は定義OBJをテストすることができますので、それは私自身のテストfooというオブジェクトを返す作ることができますどのように

public FooService{ 

public String fooFindObject(FooDefinition fooDef) throws FooDefinitionException{ 

FooFinder theFooFinders = new FooFinder(this); 
Foo fooObj = theFooFinders.findFoo(fooDef); 

//Logic to be tested inside here that will throw exception upon bad foo definitions 

return fooObj.trackingId(); 

} 

。 Mockitoが使用されているので、FooFinder objのget/setterを使うためにこのコードを書き直す可能性は許されません。これは私のコードではなく、ただテストするためだけです。

+0

。あなたはそれを嘲笑することはできません。私の場合は、 'FooFinder theFooFinders'がフィールドになるようにコードを変更することができました。アプリケーションでは、私は間違いなくDIフレームワークまたは最悪の場合を使用するだろう、私は別のクラスからそれを設定しているだろう。 – NewUser

+0

私は同意すると、DIを使用して嘲笑されたオブジェクトを提供するほうがずっと簡単になり、ソリューションを見つけることができない場合は、実装するためにコードコミットをプッシュすることになるでしょう。 –

+0

テスト容易性を向上させるプッシュは誰にとっても問題ではありません。私はあなたの制約についてはわかっていませんが、それはショットを与えます。 – NewUser

答えて

0

Mockito:PowerMockitoを拡張したライブラリがあります。

これは、通常のMockitoよりもかなり多くのハッキングを行うことができます。それはかなり甘いですが、あなたがPowerMockitoを必要とするならば、あなたのデザインは通常においがします。

私は間違いなくあなたのデザインをリファクタリングします。あなたが何らかの理由でこの操作を行うことができない場合でも、PowerMockitoとからかっコンストラクタを見てみてください:あなたは明示的に `FooFinder`インスタンスを作成するために、JVMを求めている

http://benkiefer.com/blog/2013/04/23/powermockito-constructor-mocking/

+0

私はInjectMockとMockの注釈で私の質問でPowerMockitoを述べましたが、これまで私にとっては何の助けにもなっていません。私はいくつかのサンプルコードをいただければ幸いです。 –

+0

あなたの質問は、mockitoの実装についてのみ述べました。サンプルコードは私の答えのURLにありますか? –

関連する問題