0

春のアプリケーションコンテキストから作成されているMockito Frameworkを使用して、ローカルオブジェクトをモックしようとしています。しかし、アプリケーションを実行するたびに、元のオブジェクトをモック オブジェクトに置き換えることができません。

元のクラスのコード スピネットは次のとおりです。

public void executeMyJob(){
    ApplicationContext springContext = ApplicationContextUtil.getApplicationContext();

    MusicEAO music= (MusicEAO) springContext.getBean("MusicEAO");
    List<Brand> dataList =music.getAll();

    ......
}  

をモックしたいMusicEAOので、getAll()メソッドが呼び出されると、モックオブジェクトが使用されます。

以下は私のテストクラスのコードスニペットです:

@Mock
MusicEAO musicEAO;
when(musicEAO.findAll()).thenReturn(myDefinedList);

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

3

投稿したタラからはわかりにくいですが、テストで MusicEAO をモックしているのに、実行しているコードが Spring ApplicationContext を使用して MusicEAO Bean への参照を取得していることが問題である可能性があります。

元のクラスは使用しないでくださいMusicEAO music= (MusicEAO) springContext.getBean("MusicEAO");。代わりに、Spring によって@Autowiredコンストラクターまたはセッター メソッド (または他の依存性注入メソッド) を使用して Bean が注入されます。テストすると、モック バージョンを簡単に挿入できます。

 class MyJobClass {

   MusicEAO music;

   @Autowired
   public MyJobClass(MusicEAO musicEao) {
      this.music = musicEao;
   }

   public void executeMyJob(){

       List<Brand> dataList =music.getAll();

       ......
   } 
}

あなたが言う時

アプリケーションを実行するたびに、元のオブジェクトをモックされたオブジェクトに置き換えることができません

このクラスの単体テストを実行するためにアプリケーションを実行する必要はありません。実行中のアプリケーションにモックを挿入する方法を尋ねていますか?

.

于 2012-10-29T14:54:32.310 に答える
0

このようには機能しません。あなたの現在のコードで:

  • 次のインスタンスは、テストのインスタンスです。 @Mock MusicEAO musicEAO;

  • しかし、プロダクション コードでは、Spring を使用して Music インスタンスを取得しています。 MusicEAO music= (MusicEAO) springContext.getBean("MusicEAO");

MusicEAOMusic モックをBean 名に影響させたいと春に言っているようには見えません。

単体テストを行っている場合は、Spring をいじらないようにすることをお勧めします。それが統合テストの場合は、モックを作成して Spring に渡す方法を見つける必要があります。

たとえば、Spring コンテキストでモックを作成し、テストで自動配線できます。

また、この状況で静的呼び出しを使用して Spring コンテキストを取得し、最終的にMusicオブジェクトを保持することはお勧めしません。Spring をレジストリのように考えさせられますが、実際にはそうではありません。春はコンテナです。Music代わりに、 Bean が に接続されている ( @Autowired、セッターなど)ようにコードをリファクタリングするようにしてくださいExecutionJob

@Mockそうすれば、JUnit と Mockito を使用して、や などの注釈を付けて単体テストを作成するのがさらに簡単になり@InjectMocksます。

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

于 2012-10-29T15:07:55.023 に答える