2017-10-30 4 views
1
public Data extraMethod(Data data) // interface Data 
{ 
    Data d = Singleton.getInstance().sort(data.get() , "desc"); 
    //do something, logical 
    return d; 
} 

, 클래스 Singleton는 정적 메서드 getInstance없이 public 생성자가 있습니다. 논리 부분을 테스트하고 데이터 정렬 작업없이 extraMethod을 테스트하고 싶습니다.PowerMock - 싱글 인스턴스 테스트 내가 객체 데이터 (싱글 추가 반환 결과를) 조롱 수있는 방법

+1

public Data extraMethod(Data data) // interface Data { Data d = getSingleton().sort(data.get() , "desc"); //do something, logical return d; } Singleton getSingleton(){ return Singleton.getInstance(); } 

2) 당신이 시도 유무 : 당신은 여전히 ​​설정하는 sort 메소드가 호출 될 때 발생해야하는 필요 Singleton.getInstance()를 조롱하여 원하는 객체를 반환하도록 하시겠습니까? –

답변

0

테스트중인 클래스를 스파이웨어로 지정하고 Singleton을 반환하는 패키지 수준 메서드를 만들면 PowerMock이 없어도 빠져 나갈 수 있습니다.

1) 클래스 테스트에서 테스트

@Spy 
private MyClass myClassSpy = new MyClass(); 

@Mock 
Singleton singletonStub; 

@Mock 
Data dataStub; 

@Before 
public void init(){ 
    MockitoAnnotations.initMocks(this); 
} 

@Test 
public void test() throws Exception{ 
    // Arrange 
    doReturn(singletonStub).when(myClassSpy).getSingleton(); 
    when(dataStub.get()).thenReturn(...); 
    when(singletonStub.sort(any(Data.class), "desc")).thenReturn(/* some data*/); 

    // Act and Assert   
}