簡體   English   中英

Mockito模擬重載方法

[英]Mockito mock overloaded methods

我正在嘗試模擬以下架構的重載方法

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);

無論作為參數傳遞的對象類型如何,生成的模擬總是返回第二個模擬,而忽略第一個。

我希望可以使用答案,因為它不適合評論。 您是否在這里嘗試使用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 {}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM