2016-11-30 4 views
0

나는 다음 스키마Mockito 모의 오버로드 된 메서드

JestClient { 

    DocumentResult execute(Index x) {...} 

    BulkResult execute(Bulk y) {...} 
} 

나는 모의 객체를 만들려면 다음 코드를 사용하는 오버로드 된 메서드를 조롱하려합니다.

JestClient client = Mockito.mock(JestClient.class); 

    DocumentResult setResult = Mockito.mock(DocumentResult.class); 
    when(setResult.isSucceeded()).thenReturn(true); 

    BulkResult bulkResult = Mockito.mock(BulkResult.class); 
    when(bulkResult.isSucceeded()).thenReturn(true); 

    // when(client.execute(Mockito.any(Index.class))).thenReturn(setResult); 
    // when(client.execute(Mockito.any(Bulk.class))).thenReturn(bulkResult); 

    doReturn(setResult).when(client).execute(Mockito.any(Index.class)); 
    doReturn(bulkResult).when(client).execute(Mockito.any(Bulk.class)); 

    JestClientFactory factory = Mockito.mock(JestClientFactory.class); 
    when(factory.getObject()).thenReturn(client); 

결과 모의는 항상 두 번째 모의를 반환하고 매개 변수로 전달 된 개체 유형에 관계없이 첫 번째 모크를 무시합니다.

+0

'대량'과 '색인'사이의 관계는 무엇입니까? 하나는 다른 하나를 확장합니까? – Mureinik

+0

둘 다 동일한 수퍼 클래스의 서브 클래스입니다. –

+0

인터페이스에 정의 된 메소드를'execute' 메소드로 대체합니까? 특히 일반적인 하나? –

답변

0

의견에 맞지 않아 답변을 사용하면 좋겠다고 생각합니다. 여기에 Mockito.argThat(Hamcrest.isA(SomeClass.class))을 사용해 보셨습니까?

doReturn(setResult).when(client).execute(argThat(isA(Index.class))); 

실행 가능한 예제를 제공하면 도움이됩니다. 나는 당신의 상황을 재 구현하려했지만 나의 시험은 초록색이다. 당신의 상황에 따라 다른 점은 무엇입니까?

import static org.hamcrest.MatcherAssert.assertThat; 
import static org.hamcrest.Matchers.isA; 
import static org.mockito.Matchers.any; 
import static org.mockito.Matchers.argThat; 
import static org.mockito.Mockito.doReturn; 
import static org.mockito.Mockito.mock; 

import org.junit.Test; 

public class SomeTest { 

    @Test 
    public void testName() throws Exception { 
     JestClient client = mock(JestClient.class); 

     DocumentResult setResult = mock(DocumentResult.class); 
     BulkResult bulkResult = mock(BulkResult.class); 

     doReturn(setResult).when(client).execute(any(Index.class)); 
     doReturn(setResult).when(client).execute(argThat(isA(Index.class))); 
     doReturn(bulkResult).when(client).execute(any(Bulk.class)); 

     assertThat(client.execute(new Index()), isA(DocumentResult.class)); 
     assertThat(client.execute(new Bulk()), isA(BulkResult.class)); 
    } 

    public class Input {} 

    public class Index extends Input {} 

    public class Bulk extends Input {} 

    public class JestClient { 

     DocumentResult execute(Index x) { 
      return new DocumentResult(); 
     } 

     BulkResult execute(Bulk y) { 
      return new BulkResult(); 
     } 
    } 

    public class BulkResult {} 

    public class DocumentResult {} 
}