2017-12-19 6 views
0

は私はMockito/PowerMockitoMockito/PowerMockitoは毎回異なるインスタンスを持つループで静的メソッドをモックする?

Public static Person MyFactory.getPersonObject(Info info) 

この方法は、ループ内で使用されているを使用して模擬する必要が静的メソッドを有し、各PersonためInfo瞬間が作成されます。

Infoは、Personのデータメンバーです。

For(int i = 0; i< SIZE; i++) { 
Info info = getTheInfo(i); 
Person person = MyFactory.getPersonObject(info); 
……… 
……… 
} 

私の問題は、毎回Infoインスタンスで作業する方法です。 私の嘲笑にgetTheInfo(int)を使用することはできません。

PowerMockito.mockStatic(MyFactory.class); 
PowerMockito.when(MyFactory.getPersonObject (Mockito.any(Info.class)).thenReturn(/*Person with its info instance*/); 

Mockito.any(Info.class)は、実行時に正しいInfoインスタンスに置き換える必要がありますので、おそらく私は右の方法を使用していないよ:

これは私がこれまで持っているものです。

Mockito/PowerMockitoはそれをサポートしていますか?

ありがとうございます。

+0

getTheInfo()は同じクラスのプライベートメソッドですか? – pvpkiran

+0

はいあなたが言ったようなものです – user3364652

答えて

0

これは動作するはずです。

ArgumentCaptor<Info> argumentCaptor = ArgumentCaptor.forClass(Info.class); 

    doAnswer(invocation-> { 
     Info info = argumentCaptor.getValue(); 
     /* check for some property of info and based on that return different instances of person object*/ 
     if(...) { 
     return person1 
     } 
     else if (....) { 
     return person2 
     } 
     .... 
    }).when(MyFactory).getPersonObject(argumentCaptor.capture()); 
+0

どの情報がどの人に合っているか知る方法がありません。いつも変わると言いましょう – user3364652

+0

私はあなたが何を求めているのかよくわかりません。 'MyFactory.getPersonObject'が呼び出されたときにPersonクラスを自分でテストクラスに作成して返しますか? – pvpkiran

関連する問題