[英]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.