現在、データベースコンテキストに注入して正しいオブジェクトを取得するためのパラメータとして、そのメソッド内でコンストラクタを使用する複雑なシステムの単体テストを作成しようとしています正しい環境から。クラスのメソッド内でコンストラクタを模擬した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を使うためにこのコードを書き直す可能性は許されません。これは私のコードではなく、ただテストするためだけです。
。あなたはそれを嘲笑することはできません。私の場合は、 'FooFinder theFooFinders'がフィールドになるようにコードを変更することができました。アプリケーションでは、私は間違いなくDIフレームワークまたは最悪の場合を使用するだろう、私は別のクラスからそれを設定しているだろう。 – NewUser
私は同意すると、DIを使用して嘲笑されたオブジェクトを提供するほうがずっと簡単になり、ソリューションを見つけることができない場合は、実装するためにコードコミットをプッシュすることになるでしょう。 –
テスト容易性を向上させるプッシュは誰にとっても問題ではありません。私はあなたの制約についてはわかっていませんが、それはショットを与えます。 – NewUser