2016-11-30 7 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); 

得モックは常に第二偽を返す、パラメータとして渡されたオブジェクト型の第1かかわらず無視されます。

+0

「バルク」と「インデックス」の関係は何ですか? 1つは他を拡張するか? – 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 {} 
} 
関連する問題