2017-12-19 3 views
0

은 내가 Mockito/PowerMockitoMockito/PowerMockito가 매번 다른 인스턴스가있는 루프에서 정적 메서드를 모의 사용 하시겠습니까?

Public static Person MyFactory.getPersonObject(Info info) 

이 방법은 루프에서 사용되는을 이용하여 모방 할 필요가 고정 방법을 각각 Person위한 Info 즉시 생성된다.

InfoPerson의 데이터 멤버입니다.

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

은 동일한 클래스의 private 메소드입니까? – 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

관련 문제